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

Windows API 字符串類型轉換:const char* 到 LPCWSTR (寬字符) 的正確方法

     編輯:程式設計疑難解答

問題

WinAPI CreateFont 最後一個參數類型為 LPCWSTR (即 const wchar_t*),傳入 std::string::c_str() (const char*) 報類型不匹配。

解決方案

1. 使用 MultiByteToWideChar 轉換

std::string fontName = "Arial";
int len = MultiByteToWideChar(CP_ACP, 0, fontName.c_str(), -1, NULL, 0);
std::wstring wFontName(len, 0);
MultiByteToWideChar(CP_ACP, 0, fontName.c_str(), -1, &wFontName[0], len);

HFONT hFont = CreateFont(..., wFontName.c_str()); // 正確

2. 項目設置 Unicode 字符集(推薦)

  • VS 屬性 → General → Character Set: Use Unicode Character Set。
  • 使用 TCHAR、TEXT() 宏:TEXT("Arial") 自動展開為 L"Arial" (Unicode) 或 "Arial" (MBCS)。
  • 調用 CreateFont(..., TEXT("Arial")) 即可同時兼容兩種編譯模式。

3. 直接使用寬字符字面量

CreateFont(..., L"Arial"); // L 前綴表示 wchar_t[]
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved