欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年03月08日 10:55:47   作者:一笑  
這篇文章主要給大家介紹了關于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 *”轉換為“LPCTSTR” MFCTinyxml2 C:\WebSite\MFCTinyxml2\MFCTinyxml2Dlg.cpp 106

二、解決辦法

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

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

附加示例代碼:

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轉寬字符的函數(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ù),而我卻一定要轉成寬字符wchar_t的才行呢?

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

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

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

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

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

總結

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

相關文章

  • c語言實現(xiàn)輸入一組數(shù)自動從大到小排列的實例代碼

    c語言實現(xiàn)輸入一組數(shù)自動從大到小排列的實例代碼

    下面小編就為大家?guī)硪黄猚語言實現(xiàn)輸入一組數(shù)自動從大到小排列的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • C++使用string的大數(shù)減法運算(2)

    C++使用string的大數(shù)減法運算(2)

    這篇文章主要為大家詳細介紹了C++使用string的大數(shù)減法運算,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 深入解析C++的WNDCLASS結構體及其在Windows中的應用

    深入解析C++的WNDCLASS結構體及其在Windows中的應用

    這篇文章主要介紹了C++的WNDCLASS結構體及其在Windows中的應用,WNDCLASS被用來定義窗口,文中介紹了其諸多屬性,需要的朋友可以參考下
    2016-01-01
  • OpenCV實現(xiàn)鼠標框選并顯示框選區(qū)域

    OpenCV實現(xiàn)鼠標框選并顯示框選區(qū)域

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)鼠標框選并顯示框選區(qū)域,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C++設置事件通知線程工作的方法

    C++設置事件通知線程工作的方法

    這篇文章主要介紹了C++設置事件通知線程工作的方法,是Windows應用程序設計中非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • C++如何比較兩個字符串或string是否相等strcmp()和compare()

    C++如何比較兩個字符串或string是否相等strcmp()和compare()

    這篇文章主要介紹了C++如何比較兩個字符串或string是否相等strcmp()和compare()問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • C++?STL反向迭代器的實現(xiàn)

    C++?STL反向迭代器的實現(xiàn)

    本文主要介紹了C++?STL反向迭代器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • C++詳解如何實現(xiàn)動態(tài)數(shù)組

    C++詳解如何實現(xiàn)動態(tài)數(shù)組

    這篇文章主要為大家詳細介紹了C++實現(xiàn)動態(tài)數(shù)組的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++中4種強制類型轉換的區(qū)別總結

    C++中4種強制類型轉換的區(qū)別總結

    C++風格的類型轉換提供了4種類型轉換操作符來應對不同場合的應用。下面這篇文章主要給大家介紹了C++中4種強制類型轉換的區(qū)別,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • C++?自定義單向鏈表?ListNode詳情

    C++?自定義單向鏈表?ListNode詳情

    這篇文章主要介紹了C++?自定義單向鏈表?ListNode詳情,文章將介紹鏈表中不帶頭結點,沒有存放鏈表長度的節(jié)點,從頭結點開始就存放數(shù)據(jù)得一種,具有一定得參考價值,需要的小伙伴可以參考一下
    2022-03-03

最新評論