中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

發布時間:2023-03-08 11:28:44 來源:億速云 閱讀:206 作者:iii 欄目:開發技術

本篇內容介紹了“VC++ 2019 "const char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、問題描述

項目使用Unicode編碼,當使用tinyxml2讀取xml內容時,利用root->Name()獲取的是const char*類型的字符串,直接傳遞給Edit->SetWindowTextW(),報以下錯誤

嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態
錯誤(活動) E0167 “const char *” 類型的實參與 “LPCTSTR” 類型的形參不兼容 MFCTinyxml2 C:\WebSite\MFCTinyxml2\MFCTinyxml2Dlg.cpp 106

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

導致無法正常編譯

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態
錯誤 C2664 “void CWnd::SetWindowTextW(LPCTSTR)”: 無法將參數 1 從“const char *”轉換為“LPCTSTR” MFCTinyxml2 C:\WebSite\MFCTinyxml2\MFCTinyxml2Dlg.cpp 106

二、解決辦法

1、使用微軟提供的ANSI轉寬字符的函數MultiByteToWideChar,將char* 轉換成 wchar_t*(寬字符)

2、再賦值給接受LPCTSTR寬字符類型的參數,就不再報錯

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

附加示例代碼:

const char* name = elmtRoot->Name();

//先獲取轉換成寬字符后的長度(一定要通過這種方式,先回去字符長度,因為有指定編碼為CP_ACP,編碼不同,長度也會不同)
int nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, NULL, 0);
//聲明一個寬字符類型變量,用于存放轉換后的字符
wchar_t* wname = new wchar_t[nLen];
//利用微軟ANSI轉寬字符的函數(name:ANSI字符,wname:寬字符)
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, wname, nLen);

pEditXml->SetWindowText(wname);

多啰嗦幾句:

1、網上有一些文章直接建議將VC++環境的字符集換成“多字節字符集”,強烈不建議這樣做,因為Unicode是等同于UTF-8的編碼格式,而多字節等同于GB2312(非國際化編碼)

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

2、使用同一個函數/方法,網上示例卻可以直接傳char類型的參數,而我卻一定要轉成寬字符wchar_t的才行呢?

因為同樣一個參數,VS為了國際化,目前默認字符集為“使用Unicode字符集”,以前大部分教程都是老版本VS或其他C++開發工具,因此無需轉換,直接就可以接受char*類型的參數。

按住Ctrl鍵,打開VS中的方法定義,可以看出使用UNICODE字符集時,會自動對應SetWindowTextW(LPCWSTR str),否則對應SetWindowTextA(LPCSTR str)

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決

3、要求傳參是LPCWSTR的,為何報錯是無法轉換成LPCTSTR呢?

注:此問題我至今未解惑,只了解到以下邏輯關系,大致可理解,但還有不通的地方

  • LPCTSTR == const TCHAR* == CString,可根據代碼環境UNICODE/ANSI做適配的變量類型

  • LPCWSTR = const wchar_t*,只存放UNICODE

“VC++ 2019 "const char*"類型的實參與"LPCTSTR"類型的形參不兼容如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嵊州市| 中江县| 平果县| 聊城市| 峨眉山市| 称多县| 景东| 邹平县| 涿鹿县| 五台县| 定州市| 海晏县| 辉县市| 中西区| 周口市| 喀喇沁旗| 开远市| 南昌市| 江孜县| 福建省| 隆安县| 鄂伦春自治旗| 台安县| 巧家县| 普兰店市| 青浦区| 长泰县| 遂川县| 桑植县| 浦江县| 通州市| 本溪| 玛纳斯县| 皋兰县| 广德县| 丹凤县| 永丰县| 新和县| 信丰县| 简阳市| 鹿邑县|