首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

LPCWSTR 類型問題:VS2010 Unicode 下字符串轉換與設置

     編輯:C++ 入門

問題背景

VS2010 默認字符集為 Unicode,導致 char*/string 無法直接傳給期望 LPCWSTR (const wchar_t*) 的 API(如 CreateDC)。

三種解決方案

  1. 修改項目字符集(推薦最簡單)
    專案 → 屬性 → 配置屬性 → 常規 → 字符集:選「多字節字符集」或「未設置」。
  2. 使用寬字符串字面量
    L"Hello" 或通用宏 _T("Hello") / TEXT("Hello")(定義於 tchar.h)。
  3. 運行時轉換
    MultiByteToWideChar、CString 構造、std::wstring_convert (C++11) 等將 UTF-8 轉為 UTF-16。

常見錯誤示例

// 錯誤:強制轉型只改指針類型,不轉換編碼
CreateDC((LPCWSTR)"DISPLAY", ...); // 運行時亂碼

// 正確:
CreateDC(TEXT("DISPLAY"), ...);    // 根據字符集自動展開
// 或
CreateDC(L"DISPLAY", ...);         // 顯式寬字符串

最佳實踐

  • 新項目建議統一使用 Unicode(字符集選 Unicode),字符串字面量用 _T() 或 L 前綴,內部用 wchar_t/std::wstring/CString。
  • 舊項目遷移時,若不想全面改動,改字符集為多字節最快。
  • 切勿用 (LPCWSTR) 強制轉換 char*,這是編碼錯誤的溫床。

總結

LPCWSTR 本質是 const wchar_t*。VS Unicode 設置下,所有 Win32 API 字符串參數均為寬字符版本。解決核心在於「字面量寬字符化」或「項目字符集一致性」。推薦現代做法:全項目 Unicode + _T() 宏 + CString/std::wstring。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved