在Qt项目文件.pro所在的目录,新建一个libs文件夹和include文件夹,将Sadp.lib复制到libs目录里,将Sadp.h文件复制到include目录里
在.pro文件里添加以下命令
INCLUDEPATH += \
-L. $$PWD\include
LIBS += \
-L. $$PWD/libs/Sadp.lib
将下图的dll和sys文件复制到项目生产的exe文件所在目录:
libeay32.dll就是个大坑,它与海康SDK犯冲突,导致海康SDK无法正确获取NVR等设备的信息,这个不要复制过去
简单测试代码:在合适的位置调用findDevice(),更多功能看海康文档
#include "Sadp.h"
//设备信息回调函数
void __stdcall SadpDataCallBack_V40(const SADP_DEVICE_INFO_V40 *lpDeviceInfoV40, void* pUserData)
{
qDebug()<< " IP " << lpDeviceInfoV40->struSadpDeviceInfo.szIPv4Address; //设备ip
qDebug()<<" Mac "<< lpDeviceInfoV40->struSadpDeviceInfo.szMAC; //设备Mac地址
qDebug()<<" SerialNO "<< lpDeviceInfoV40->struSadpDeviceInfo.szSerialNO; //设备序列号
qDebug()<<" Result "<< lpDeviceInfoV40->struSadpDeviceInfo.iResult; //消息类型: 1.设备上线, 2.设备更新, 3.设备下线
qDebug()<<"\r\n----------------------------------------\r\n";
}
void HKworks::findDevice()//自己封装的类
{
//开启sadp日志 3(打印所以日志) "C:\\SadpLog\\"(日志目录) false(保留所有日志文件)
SADP_SetLogToFile(3, "C:\\SadpLog\\", false); //开启sadp服务
int iRet = SADP_Start_V40(SadpDataCallBack_V40);
if (iRet == 0)
{
//开启失败,获取错误码
int iError = SADP_GetLastError();
qDebug()<<"SADP_Start_V40 Failed! Err "<<iError;
}
SADP_SetAutoRequestInterval(10);
}
将Sadp.h保存为utf8-bom格式,找到以下代码
#if defined _WIN32 || defined _WIN64
#define CSADP_API extern "C"__declspec(dllimport)
#elif defined __linux__ || defined __APPLE__
#define CSADP_API extern "C"
#endif
修改#define CSADP_API extern “C”__declspec(dllimport)为(在C"后面加了一个空格)
#define CSADP_API extern "C" __declspec(dllimport)
海康HCNetSDK和Sadp有重复定义的内容,编译器4005警告,在头文件里所有#include 的上边加以下命令
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable : 4005)
#include "HCNetSDK.h"
#include "Sadp.h"
#pragma warning (pop)
#pragma warning (default : 4005)
#endif