1. 程式人生 > >解決不能從CONST CHAR *轉換為LPCWSTR

解決不能從CONST CHAR *轉換為LPCWSTR

有時候複製了整個框架程式確發現有編譯不通過的問題,命名人家的程式編譯能通過,到了自己編譯的時候卻編譯不能通過,這個時候也許有各種問題,有些問題讓人匪夷所思。

編譯器有時候會根據編碼方式來選擇定義為LPCWSTR還是LPCTSTR

LPSTR: 32bit指標 指向一個字串,每個字元佔1位元組。 相當於 char *
LPCSTR: 32-bit指標 指向一個常字串,每個字元佔1位元組。 相當於 const char *
LPTSTR: 32-bit指標 每字元可能佔1位元組或2位元組,取決於Unicode是否定義
LPCTSTR:32-bit指標 指向一個常字串,每字元可能佔1位元組或2位元組,取決於Unicode是否定義
LPWSTR: 32-bit指標,指向一個unicode字串的指標,每個字元佔2位元組。
LPCWSTR:32-bit指標, 指向一個unicode字串常量的指標,每個字元佔2位元組。
在上面的型別中,L表示long, P表示指標,C表示constant, T表示指標指向的字元佔的位元組數取決於Unicode是否定義,W表示wide,STR就是string的意思。
Windows使用兩種字符集ANSI和Unicode,前者在處理英文字元時使用單位元組方式,在處理中文字元時使用雙位元組方式。後者不管是英文字元還是中文字元都是採用雙位元組方式表示。

解決方法:

1.進行強制轉換:
如使用MessageBox(hwnd,”TEST”,NULL,0)就會報錯,如果使用強制轉換(LPCWSTR)”TEST”,雖然能夠通過,但是編碼會出錯。
可行的辦法是使用 _T(“TEST”)轉換,或者TEXT(“TEST” )都可以

MessageBox(hwnd,TEXT("TEST"),NULL,0);
MessageBox(hwnd,_T("TEST"),NULL,0);

或者 強制使用ANSI字元 MessageBoxA(hwnd,"TEST",NULL,0);
2.更改編碼格式
專案選單——專案屬性(最後一個)——配置屬性——常規——專案預設值——字符集,將使用Unicode字符集改為未設定即可。