不能從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個字節。
所以有字符做參數的函數相應也用兩個版本了。
