不能從const char *轉換為LPCWSTR --VS經常碰到


不能從const char *轉換為LPCWSTR

在VC 6.0中編譯成功的項目在VS2005 vs2005、vs2008、vs2010中常會出現類型錯誤。

經常出現的錯誤是:不能從const char *轉換為LPCWSTR

如使用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);

另一種方法是:項目菜單——項目屬性(最后一個)——配置屬性——常規——項目默認值——字符集,將使用Unicode字符集改為未設置即可。

什么原因:

因為你的程序在UNICODE(寬字節)字符集下運行,如果調用了 MessageBox ,實際上調用的是 MessageBoxW 函數;

如果你的程序在 ANSI 字符集運行,調用 MessageBox ,就相當於調用 MessageBoxA;

其中 MessageBoxW 支持 UNICODE;MessageBoxA 支持ANSI;

UNICODE與ANSI 有什么區別呢?簡單的說,UNICODE版的字符比ANSI 的內存占用大,比如:Win32程式中出現的標准定義 char 占一個字節,

而 char 的UNICODE版被定義成這樣:

typedef unsigned short wchar_t ;占2個字節。

所以有字符做參數的函數相應也用兩個版本了。


免責聲明!

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



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