用VS2015,建立一個新的MFC的工程,把工程設定為使用多位元組字符集,加入一個多位元組字符集類,不管怎么編譯都是通不過的。如果是UNICODE的就沒問題。
如果直接用vs2015打開2015以下版本的多位元組字符集專案,是可以編譯通過的。但是如果用VS2015新建專案設定成多位元組字符集就不行了。
大家碰到過這個問題嗎?還是我這里問題?
uj5u.com熱心網友回復:
莫非是utf8惹的禍?uj5u.com熱心網友回復:
vs2015 在專案中設定多位元組字符集沒有效果,設定了還是在使用Unicode。就算不加其他任何類,新建一個專案,設定成多位元組字符集,還是默認使用Unicode編譯的。像這樣隨便寫兩句代碼:
CString str = "11";
SetWindowText("11");
就會提示報錯
error C2440: “初始化”: 無法從“const char [3]”轉換為“ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>”
note: class“ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>”的建構式宣告為“explicit”
error C2664: “void CWnd::SetWindowTextW(LPCTSTR)”: 無法將引數 1 從“const char [3]”轉換為“LPCTSTR”
uj5u.com熱心網友回復:
沒人知道怎么解決么,我也遇到這個問題了
uj5u.com熱心網友回復:
CString str = _T("11");uj5u.com熱心網友回復:
要裝MBCS補丁,到ms官網上去找uj5u.com熱心網友回復:
我這沒事vs2015 update3而且unicode這個好用干嘛不用?
uj5u.com熱心網友回復:
C++新標準 默認的char就是utf8字符 個人覺得挺好最好新工程別再選unicode了 到時候轉換的時候 到底是mbcs轉utf16還是utf8轉16呢?容易造成混亂
uj5u.com熱心網友回復:
CString str = "11";SetWindowText("11");
改成
CString str = _T("11");
SetWindowText(_T("11"));
uj5u.com熱心網友回復:
Cstring 與string 有啥區別uj5u.com熱心網友回復:
“”要裝MBCS補丁,到ms官網上去找“”好像是這樣
uj5u.com熱心網友回復:
MFC SetWindowText 是對 Windows API 的封裝,編碼只有一種,當然會有問題了。而 CString 的運算子多載,一般都會有兩個:針對 MBCS 和 Unicode 的不同版本。
一般來說,CString 不管是專案設定為何種編碼,都是正確的:
CString str1 = "11";
CString str2 = L"11";
CString str3 = _T("11"); // 或 TEXT("11")
而 SetWindowText 則不同,ANSI/MBCS 就必須是:
SetWindowText("11");
Unicode 就必須是:
SetWindowText(L"11");
當然,你可以用任意一個 CString 來設定:
SetWindowText((LPCTSTR)str1);
SetWindowText((LPCTSTR)str2);
SetWindowText((LPCTSTR)str3);
那時因為 CString 的運算子多載會將任何編碼轉換為專案所設定編碼,即與 SetWindowText 相符。
uj5u.com熱心網友回復:
檢查下你的工程屬性或代碼中有沒有其它地方設定UNICODE或_UNICODE這兩個宏。uj5u.com熱心網友回復:
我經常遇到, 不僅修改字符集無效, 修改其他配置項也無效. 比如把exe改成dll, 再比如修改運行時庫, 統統無效. 目前沒有找到解決方法, 我這出現了就只能重裝.uj5u.com熱心網友回復:
據說要打多位元組字符集補丁。
uj5u.com熱心網友回復:
你需要下載多位元組的補丁,默認好像是不支持多位元組的uj5u.com熱心網友回復:
我的VS2015 Update1正常,也沒打MBCS補丁。uj5u.com熱心網友回復:
CString str = _T("11");CStringA str = "11";
CStringW str = L"11";
一一對應
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/52892.html
標籤:非技術類
