VS2010 默認字符集為 Unicode,導致 char*/string 無法直接傳給期望 LPCWSTR (const wchar_t*) 的 API(如 CreateDC)。
L"Hello" 或通用宏 _T("Hello") / TEXT("Hello")(定義於 tchar.h)。MultiByteToWideChar、CString 構造、std::wstring_convert (C++11) 等將 UTF-8 轉為 UTF-16。// 錯誤:強制轉型只改指針類型,不轉換編碼
CreateDC((LPCWSTR)"DISPLAY", ...); // 運行時亂碼
// 正確:
CreateDC(TEXT("DISPLAY"), ...); // 根據字符集自動展開
// 或
CreateDC(L"DISPLAY", ...); // 顯式寬字符串
_T() 或 L 前綴,內部用 wchar_t/std::wstring/CString。(LPCWSTR) 強制轉換 char*,這是編碼錯誤的溫床。LPCWSTR 本質是 const wchar_t*。VS Unicode 設置下,所有 Win32 API 字符串參數均為寬字符版本。解決核心在於「字面量寬字符化」或「項目字符集一致性」。推薦現代做法:全項目 Unicode + _T() 宏 + CString/std::wstring。