//
// Function:
//  将Ansi字符串转换为Unicode字符串
//
PCWSTR Ansi2Unicode(PCSTR pMultiByteStr)
{
 int nLenOfWideCharStr = MultiByteToWideChar(CP_ACP, 0, pMultiByteStr, -1, NULL, 0);
 PWSTR pWideCharStr = (PWSTR)malloc(nLenOfWideCharStr * sizeof(wchar_t));
 if(pWideCharStr)
 {
  MultiByteToWideChar(CP_ACP, 0, pMultiByteStr, -1, pWideCharStr, nLenOfWideCharStr);
 }
 return pWideCharStr;
}

// 调用方法
   const char *pMultiByteStr = "中文";
   const wchar_t *pWideCharStr = Ansi2Unicode(pMultiByteStr);
   if(pWideCharStr)
   {
    MessageBox(hWnd, pWideCharStr, TEXT("Ansi2Unicode"), MB_OK);
    free((void *)pWideCharStr);
    pWideCharStr = NULL;
   }

//
// Function:
//  将Unicode字符串转换为Ansi字符串
//
PCSTR Unicode2Ansi(PCWSTR pWideCharStr)
{
 int nLenOfMultiByteStr = WideCharToMultiByte(CP_ACP, 0, pWideCharStr, -1, NULL, 0, NULL, NULL);
 PSTR pMultiByteStr = (PSTR)malloc(nLenOfMultiByteStr);
 if(pMultiByteStr)
 {
  WideCharToMultiByte(CP_ACP, 0, pWideCharStr, -1, pMultiByteStr, nLenOfMultiByteStr, NULL, NULL);
 }
 return pMultiByteStr;
}

// 调用方法
   const wchar_t *pWideCharStr = L"中文";
   const char *pMultiByteStr = Unicode2Ansi(pWideCharStr);
   if(pMultiByteStr)
   {
    free((void *)pMultiByteStr);
    pMultiByteStr = NULL;
   }