不能從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字符集改為未設置即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM