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
出现原因:项目中的字符集为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中的相应函数接口到当前工程中