誰能幫我糾正這個代碼:轉換的char []到LPCWSTR
char szBuff[64];
sprintf(szBuff, "%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
的錯誤是,它不能第二個參數轉換爲LPCWSTR。
誰能幫我糾正這個代碼:轉換的char []到LPCWSTR
char szBuff[64];
sprintf(szBuff, "%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
的錯誤是,它不能第二個參數轉換爲LPCWSTR。
對於這個具體情況下,解決方法是相當簡單:
wchar_t szBuff[64];
swprintf(szBuff, L"%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
也就是說,在整個使用Unicode字符串。通常,在Windows上編程時,使用wchar_t
和UTF-16可能是最簡單的。當然,這取決於您需要與其他系統進行多少交互。
對於一般情況下,如果你有一個ASCII(或char *
)字符串,請使用WideCharToMultiByte對於一般情況下,或mbstowcs
作爲@Matthew指出了簡單的情況(mbstowcs
作品如果字符串是在當前C語言環境)。
你可能想看看mbstowcs,它會將傳統的「每個字符一個字節」字符串轉換爲「每字符多個字節」字符串。
或者,將您的項目設置更改爲使用多字節字符串 - 默認情況下,它們通常是「Unicode」或「寬字符」字符串(我不記得頭頂的確切選項名稱)。
如果使用UNICODE
進行編譯,請使用雙倍寬度處理所有字符串 - 即將它們定義爲wchar_t*
。
如果您確實必須將ASCII轉換爲Unicode,請使用ATL conversion macros。
既然你的標籤建議VC++,我建議CString。如果是的話,那麼下面的片段也將爲您的工作情況:
CString szBuff;
szBuff.Format(_T("%p"), m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
使用的MultiByteToWideChar()作品對我來說:
void main(int argc, char* argv[])
{
...
wchar_t filename[4096] = {0};
MultiByteToWideChar(0, 0, argv[1], strlen(argv[1]), filename, strlen(argv[1]));
// RenderFile() requires LPCWSTR (or wchar_t*, respectively)
hr = pGraph->RenderFile(filename, NULL);
...
}
+1'mbstowcs'! – alimg 2014-07-05 13:11:09