最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年03月08日 10:55:47   作者:一笑  
這篇文章主要給大家介紹了關(guān)于VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容的解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、問題描述

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

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

導致無法正常編譯

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

二、解決辦法

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

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

附加示例代碼:

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

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

pEditXml->SetWindowText(wname);

多啰嗦幾句:

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

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

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

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

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

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

  • LPCTSTR == const TCHAR* == CString,可根據(jù)代碼環(huán)境UNICODE/ANSI做適配的變量類型
  • LPCWSTR = const wchar_t*,只存放UNICODE

總結(jié)

到此這篇關(guān)于VC++ 2019 "const char*"類型的實參與"LPCTSTR"類型的形參不兼容解決的文章就介紹到這了,更多相關(guān)VC++ const char*實參與LPCTSTR形參不兼容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV實現(xiàn)圖像校正功能

    OpenCV實現(xiàn)圖像校正功能

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖像校正功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 一篇文章帶你了解C語言的文件操作

    一篇文章帶你了解C語言的文件操作

    這篇文章主要為大家詳細介紹了C語言的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++?Cmake使用詳細教程(看這一篇就夠了!)

    C++?Cmake使用詳細教程(看這一篇就夠了!)

    CMake是一個比make更高級的編譯配置工具,它可以根據(jù)不同平臺、不同的編譯器,生成相應的Makefile或者vcproj項目,下面這篇文章主要給大家介紹了關(guān)于C++?Cmake使用的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • VS2019中CMake項目的簡單使用方法

    VS2019中CMake項目的簡單使用方法

    這篇文章主要介紹了VS2019中CMake項目的簡單使用方法,需要的朋友可以參考下
    2020-02-02
  • C語言中for循環(huán)問題(一個小坑需注意)

    C語言中for循環(huán)問題(一個小坑需注意)

    這篇文章主要給大家介紹了關(guān)于C語言中for循環(huán)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C++實現(xiàn)簡易版掃雷游戲

    C++實現(xiàn)簡易版掃雷游戲

    大家好,本篇文章主要講的是C++實現(xiàn)簡易版掃雷游戲,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++用mysql自帶的頭文件連接數(shù)據(jù)庫

    C++用mysql自帶的頭文件連接數(shù)據(jù)庫

    現(xiàn)在正做一個接口,通過不同的連接字符串操作不同的數(shù)據(jù)庫。要用到mysql數(shù)據(jù)庫。通過網(wǎng)上的一些資料和自己的摸索,大致清楚了C++連接mysql的方法??梢酝ㄟ^2種方法實現(xiàn)。第一種方法是利用ADO連接,第二種方法是利用mysql自己的api函數(shù)進行連接。今天主要來講解下使用API
    2016-07-07
  • C++實現(xiàn)LeetCode(10.正則表達式匹配)

    C++實現(xiàn)LeetCode(10.正則表達式匹配)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(10.正則表達式匹配),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++使用初始化列表的方式來初始化字段的方法

    C++使用初始化列表的方式來初始化字段的方法

    今天小編就為大家分享一篇關(guān)于C++使用初始化列表的方式來初始化字段的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++實現(xiàn)簡易的彈球小游戲

    C++實現(xiàn)簡易的彈球小游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡易的彈球小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

五常市| 奇台县| 济宁市| 霸州市| 迁西县| 荆州市| 闸北区| 太湖县| 罗田县| 萨嘎县| 射阳县| 柯坪县| 林口县| 永济市| 湟源县| 梅河口市| 华池县| 云阳县| 平原县| 邓州市| 蓬莱市| 卓尼县| 桐城市| 林周县| 镇原县| 灌云县| 红安县| 苍溪县| 太保市| 襄城县| 弋阳县| 大埔县| 山阴县| 万年县| 遂溪县| 大竹县| 小金县| 武城县| 龙泉市| 运城市| 香港 |