VS2017中C++工程接入SDK時問題匯總[新手向]


(1)如何在工程中接入SDK:

這里以大華的win32平台SDK為例,去官網下載sdk包后解壓,這里我解壓在E盤:

屬性 -> C/C++ -> 常規 -> 附加包含目錄:E:\922166_General_NetSDK_Chn_Win32_IS_V3.055.0000000.0.R.210524\頭文件(包含相關頭文件所致目錄)

屬性 -> 鏈接器 -> 常規 -> 附加庫目錄:E:\922166_General_NetSDK_Chn_Win32_IS_V3.055.0000000.0.R.210524\庫文件(若不配置,則附加依賴項需要指定路徑)
屬性 -> 輸入 -> 附加依賴項:xxx.lib  yyy.lib(可指定絕對路徑或只指定庫名稱,若只指定庫名稱,則需要配置附加庫目錄,這里我上邊這行設置了附加庫目錄,所以只寫庫的全稱就行,如下圖)

把xxx.dll   yyy.dll文件拷貝到工程的.exe可執行文件所在目錄
至此SDK導入成功,如果需要能夠斷點調試到SDK的源碼,則需要:把xxx_sdk.ilk和xxx_sdk.pdb拷貝到工程的可執行文件所在目錄

(2)字符集報錯

錯誤 C2440 “初始化”: 無法從“const char [5]”轉換為“ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>”

出現原因:項目中的字符集為Unicode字符集,SDK的Demo工程中字符集為多字符字符集,倆者不匹配,所以不能直接把原SDK的Demo代碼移植過來,需要對出錯的語句進行轉換:

項目所用字符集的查看方式:項目-》項目屬性-》配置屬性-》常規-》字符集

①把字符集由Unicode字符集修改為多字符字符集(個人使用無效)

②把  CString strSnapSeq = "1213"; 替換為  CString strSnapSeq = _T("1213"); 即可解決這類問題。(親測有效)

_T("")是一個宏,他的作用是讓你的程序支持Unicode編碼,因為Windows使用兩種字符集ANSI和UNICODE,
前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。
而后者是雙字節方式,方便處理雙字節字符。

錯誤 :"const wchar_t *" 類型的實參與"const char*"類型的形參不兼容  / "const wchar_t *"類型的實參與"LPCTSTR"類型的形參不兼容

若修改字符集和使用_T()函數均無效,則可以用“CString轉char*類型”的方法

CString strSource;//宣告CString
char* charSource; //宣告char*

法1:
charSource = (char*)strSource.GetBuffer(0);

法2:
charSource = (char*)strSource.GetBuffer(strSource.GetLength());

法3:
charSource = (char*)(LPCTSTR)strSource;

法四:
c和c++使用的內存拷貝函數,memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。
void* memcpy(void* destination, const void* source, size_t num);
void* dest 目標內存    const void* src  源內存    size_t num  字節個數

 memcpy(charSource,strSource, strSource.GetLength());

我個人使用的是用法(3):(char*)(LPCTSTR)親測有效

(3)如何使用SDK中的相應函數接口到當前工程中

  在右側解決方案資源管理器中,右鍵單擊頭文件,點擊添加將SDK中所需頭文件添加到工程目錄的頭文件文件夾中,將庫文件.lib用同樣方式添加到資源文件文件夾中。

  接下來就可以參考SDK開發文檔(通常為.chm文件)中的各個函數參數和功能說明,編寫相關的封裝類,然后通過這些封裝類的對象或者指針,對SDK接口函數進行調用,實現對應的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM