編譯器有時候會根據編碼方式來選擇定義為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字符集改為未設置即可。