首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2010 MFC 專案報錯 C2440/C2664:Unicode 字符集下字串字面量需加 L 前綴

     編輯:程式設計綜合問答

錯誤信息:

error C2440: “=”: 無法從“const char [15]”轉換為“LPCWSTR”
error C2664: “CreateWindowExW”: 不能將參數 2 從“const char [15]”轉換為“LPCWSTR”

根因

專案屬性 → Character Set 設置為 **Use Unicode Character Set**。此模式下:

  • TCHAR 映射為 wchar_t。
  • LPCWSTR 即 const wchar_t*。
  • 普通字串 "abc" 類型為 const char*,無法隱式轉換。

三種修正方案

  1. 字串加 L 前綴(推薦):
    wc.lpszClassName = L"window窗口創建";
    CreateWindowExW(..., L"window窗口創建", ...)
  2. 使用 TEXT/_T 宏(跨字符集兼容):
    wc.lpszClassName = TEXT("window窗口創建");
    Unicode 下展開為 L"...",MBCS 下為 "..."。
  3. 改專案字符集為 Multi-Byte(不推薦):
    Properties → Advanced → Character Set → Use Multi-Byte Character Set。舊代碼遷移可用,新專案建議 Unicode。

同理修正 TextOutW

TextOutW(hdc, 10, 20, L"哈哈,windows編程創建的窗口!", 28);

最佳實踐

  • 新專案統一 Unicode,所有字面量用 TEXT() 或 L""。
  • sizeof(TCHAR) 替代硬編碼 1/2,_countof 計算字符數而非字節數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved