下面是我根据海康官方文档代码,放到VS 2022 版本中调试通过后的代码:

#include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "HCNetSDK.h"using namespace std;//时间解析宏定义
#define GET_YEAR(_time_)      (((_time_)>>26) + 2000)
#define GET_MONTH(_time_)     (((_time_)>>22) & 15)
#define GET_DAY(_time_)       (((_time_)>>17) & 31)
#define GET_HOUR(_time_)      (((_time_)>>12) & 31)
#define GET_MINUTE(_time_)    (((_time_)>>6)  & 63)
#define GET_SECOND(_time_)    (((_time_)>>0)  & 63)BOOL CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void* pUser)
{switch (lCommand){case COMM_FIREDETECTION_ALARM: //火点检测报警{printf("fire192.168.1.31 \n");NET_DVR_FIREDETECTION_ALARM struFireDetection = { 0 };memcpy(&struFireDetection, pAlarmInfo, sizeof(NET_DVR_FIREDETECTION_ALARM));printf("火点检测报警: RelativeTime:%d, AbsTime:%d, PTZ{PanPos:%d, TiltPos:%d, ZoomPos:%d}, \PicDataLen:%d, DevInfo{DevIP:%s, Port:%d, Channel:%d, IvmsChannel:%d}, \FireMaxTemperature:%d, TargetDistance:%d, fireRectInfo{fX:%f,fY:%f,fWidth%f,fHeight%f}, \fireMaxTemperaturePoint{fX:%f,fY:%f}\n", struFireDetection.dwRelativeTime, \struFireDetection.dwAbsTime, struFireDetection.wPanPos, struFireDetection.wTiltPos, \struFireDetection.wZoomPos, struFireDetection.dwPicDataLen, \struFireDetection.struDevInfo.struDevIP.sIpV4, struFireDetection.struDevInfo.wPort, \struFireDetection.struDevInfo.byChannel, struFireDetection.struDevInfo.byIvmsChannel, \struFireDetection.wFireMaxTemperature, struFireDetection.wTargetDistance, \struFireDetection.struRect.fX, struFireDetection.struRect.fY, struFireDetection.struRect.fWidth, \struFireDetection.struRect.fHeight, struFireDetection.struPoint.fX, struFireDetection.struPoint.fY);NET_DVR_TIME struAbsTime = { 0 };struAbsTime.dwYear = GET_YEAR(struFireDetection.dwAbsTime);struAbsTime.dwMonth = GET_MONTH(struFireDetection.dwAbsTime);struAbsTime.dwDay = GET_DAY(struFireDetection.dwAbsTime);struAbsTime.dwHour = GET_HOUR(struFireDetection.dwAbsTime);struAbsTime.dwMinute = GET_MINUTE(struFireDetection.dwAbsTime);struAbsTime.dwSecond = GET_SECOND(struFireDetection.dwAbsTime);//保存报警抓拍图片if (struFireDetection.dwPicDataLen > 0 && struFireDetection.pBuffer != NULL){char cFilename[256] = { 0 };HANDLE hFile;DWORD dwReturn;char chTime[128];sprintf_s(chTime, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d", struAbsTime.dwYear, struAbsTime.dwMonth, struAbsTime.dwDay, struAbsTime.dwHour, struAbsTime.dwMinute, struAbsTime.dwSecond);sprintf_s(cFilename, "FireDetectionPic[%s][%s].jpg", struFireDetection.struDevInfo.struDevIP.sIpV4, chTime);LPCWSTR tmp;// begin added by zhangchaotmp = L"FireDetectionPic31.jpg";// end  added by zhangchao//printf("%s", tmp);hFile = CreateFile(tmp, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){break;}WriteFile(hFile, struFireDetection.pBuffer, struFireDetection.dwPicDataLen, &dwReturn, NULL);CloseHandle(hFile);hFile = INVALID_HANDLE_VALUE;}}break;default:printf("other192.168.1.31 \n");printf("其他报警,报警信息类型: %d\n", lCommand);break;}return TRUE;
}void RunCam(const char* ip) {//---------------------------------------// 初始化NET_DVR_Init();//设置连接时间与重连时间NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 注册设备LONG lUserID;//登录参数,包括设备地址、登录用户、密码等NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };struLoginInfo.bUseAsynLogin = 0; //同步登录方式strcpy_s(struLoginInfo.sDeviceAddress, ip);struLoginInfo.wPort = 8000; //设备服务端口strcpy_s(struLoginInfo.sUserName, "your_username"); //设备登录用户名strcpy_s(struLoginInfo.sPassword, "your_password"); //设备登录密码//设备信息, 输出参数NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 };lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);if (lUserID < 0){printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;}//设置报警回调函数NET_DVR_SetDVRMessageCallBack_V31(MessageCallback, NULL);//启用布防LONG lHandle;NET_DVR_SETUPALARM_PARAM  struAlarmParam = { 0 };struAlarmParam.dwSize = sizeof(struAlarmParam);//火点检测不需要设置其他报警布防参数,不支持lHandle = NET_DVR_SetupAlarmChan_V41(lUserID, &struAlarmParam);if (lHandle < 0){printf("NET_DVR_SetupAlarmChan_V41 error, %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}Sleep(50000); //等待过程中,如果设备上传报警信息,在报警回调函数里面接收和处理报警信息//撤销布防上传通道if (!NET_DVR_CloseAlarmChan_V30(lHandle)){printf("NET_DVR_CloseAlarmChan_V30 error, %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}//注销用户NET_DVR_Logout(lUserID);//释放SDK资源NET_DVR_Cleanup();
}void main() {RunCam("192.168.1.31");return;
}

如何配置VS 2022 ?

第一步:打开窗口顶部 【项目】菜单,选中 【<某某项目>属性】。

第二步:在打开的对话框中,左侧菜单选择 【C/C++】=> 【常规】,选中右侧附加包含目录中,点击右侧出现的向下箭头,点击编辑,在打开的对话框中如下填写:

其中 D:\ws\vc\emptycam\hkheader 文件夹放着海康的头文件,分别是: DataType.h、DecodeCardSdk.h、HCNetSDK.h、plaympeg4.h。

第三步:左侧菜单选择 【链接器】=> 【常规】。右侧选中附加库目录,点击右侧小三角,点击编辑,打开对话框。

文件夹 D:\ws\vc\emptycam\hkdll 是放海康dll文件的地方。文件如下图所示:

第四步:左侧菜单选择 【链接器】=> 【输入】。右侧选中【附加依赖项】点击右侧小三角,点击编辑,打开对话框。内容按照图片里的文字进行填写。


第五步:如果是64位系统,生成完解决方案后,运行程序,可能会出现提示缺少dll的情况。找到项目文件夹下的 x64\Debug 文件夹,把 D:\ws\vc\emptycam\hkdll 里面所有的dll都放到里面。另外根据使用情况把子文件夹中的dll也放进去。

常见问题解决方法

1.把生成好的exe和海康的dll放到其他机器上,然后运行的时候,可能会报:丢失VCRUNTIME140D.dll 文件的错误,如下图所示:


打开文件夹 C:\Windows\System32 找到 vcruntime140d.dll 文件并复制粘贴到目标机器上,就行。

2.把生成好的exe和海康的dll放到其他机器上,然后运行的时候,可能会报:丢失ucrtbased.dll 文件的错误,如下图所示:


打开文件夹 C:\Windows\System32 找到 ucrtbased.dll 文件并复制粘贴到目标机器上,就行。

3.丢失 MSVCP140D.dll 文件,如下图所示:


打开文件夹 C:\Windows\System32 找到 msvcp140d.dll 文件并复制粘贴到目标机器上,就行。

4.丢失 VCRUNTIME140_1D.dll 文件,如下图所示


打开文件夹 C:\Windows\System32 找到 vcruntime140_1d.dll 文件并复制粘贴到目标机器上,就行。

【160】VS2022调试通过海康摄像头烟火识别SDK相关推荐

  1. 【166】VS2022调试通过海康人脸抓拍SDK的C++代码

    具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 下面是人脸抓拍的C++代码,把原来示例中的CreateFile函数改成了CreateFileA函数,避免出现无法 ...

  2. 【173】VS2022调试通过海康温度报警SDK的C++代码

    具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 操作系统: Windows 需要先在海康平台设置好报警温度,然后就可以编写代码监听警报.此功能可以用于火灾报警的 ...

  3. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作

    LiveNVR功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作 1.流媒体服务说明 2.支持海康SDK接入 3.视频广场查看播放 4.预置位接口 4.RTSP/HLS/FLV/RT ...

  4. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像

    LiveNVR功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像 1.流媒体服务说明 2.支持海康SDK接入 3.查看设备录像 3.1.时间轴模式 3.2.列表模式 4.RTS ...

  5. 通过海康sdk实现指定时间段内的录像文件下载

    通过海康sdk实现指定时间段内的录像文件下载 实现方式 录像文件下载实现流程 实现方式 下载录像文件接口 提供获取录像文件下载进度 个人博客:banmajio's blog 海康sdk二次开发系列文章 ...

  6. 调用海康摄像头实时识别数字牌数字

    项目场景: 调用海康摄像头实时识别数字牌数字 前言 项目所需,调用网络摄像头来完成对一个数字牌的识别,用模板匹配的方法分离出数字 用VS2015+OPENCV3.4.3完成 一.调用摄像头 首先在VS ...

  7. php对接海康视频教程_EasyNVR无插件互联网直播平台对接海康摄像头如何通过SDK将视频在前端网页播放...

    原标题:EasyNVR无插件互联网直播平台对接海康摄像头如何通过SDK将视频在前端网页播放 市场上常见的海康.大华.宇视等网络摄像头只要支持RTSP协议,都可以接入到EasyNVR中,今天主要给大家分 ...

  8. 采用EasyNVR网页无插件互联网直播平台对接海康摄像头如何通过SDK将视频在前端网页上进行播放?

    背景分析 安防摄像头在进行互联网直播中所使用的EasyNVR核心在于摄像机的音视频流的获取.转换.转码与高性能分发,同时同步完成对实时直播流的录像存储,在客户端(PC浏览器.Android.iOS.微 ...

  9. 最详细的JavaWeb服务器端通过海康SDK实现对摄像机的控制。

    需求介绍: 近期需求,需要通过JavaWeb开发,实现在web页面上对海康摄像机进行调焦.控制方向.调光圈大小等操作.通过研究海康官网给的demo,进行JavaWeb二次开发.同时也欢迎各位小伙伴留言 ...

最新文章

  1. linux数组删除数据,JavaScript在数组的循环中删除元素
  2. Jupyter notebook 编写scala与spark
  3. 数组和链表的区别以及应用场景
  4. int string java 呼转
  5. 计算机网络实验(华为eNSP模拟器)——第九章 配置多个虚拟局域网(vlan)
  6. odoo10学习笔记十四:mixin其他功能模块
  7. 处理机和处理器的区别
  8. python写word表格_使用表格—— 使用Python读写Office文档之三
  9. IDEA卡顿解决方法
  10. 动态设置样式 calc计算
  11. MATLAB学习——Matlab系统环境介绍
  12. 历年软件设计师 试卷 参考案例解析
  13. java读取文件 classpath_Java读取Classpath文件
  14. 走进龙芯3A3000(一)安装Loongnix
  15. “科林明伦杯”哈尔滨理工大学第十届部分题解
  16. 华为服务器 维护手册,华为常用维护手册.doc
  17. splice添加、替换、删除数组元素
  18. mosfet损耗分析/米勒效应
  19. 风起乌兰察布,中国自动驾驶迎来170倍提速
  20. 内存照片删除能恢复吗?赶紧看怎么恢复

热门文章

  1. Canonical通过Flutter启用Linux桌面应用程序支持
  2. 问题 B: 不同出栈情况(栈和队列)
  3. 计算机与英语关系,计算机底层和英文毫无关系
  4. 如何在 Windows 中快速查找文档
  5. 全球首款18GB RAM手机:腾讯ROG游戏手机5发布
  6. Hive创建表的几种方式
  7. Unity3d之设计模式(二)工厂模式
  8. 再谈:数据治理的长效运营机制!
  9. 直播预告更新 | 火爆全网的ChatGPT为什么这么强?
  10. js 事件绑定传入自定义参数