海康网络摄像头二次开发

项目中用到了海康的一款网络摄像头,基于项目自身需求编写软件需要用到海康提供的sdk,通过查看海康提供的示例,决定在第一个分功能示例的基础上进行程序编写。由于我们并没有使用云台,因此将其中的云台控制相关部分裁剪掉即可得到一个简单的图像数据采集、存储及抓图软件。

我采用的开发环境是visual studio 2015,首先需在项目属性中设置好头文件及库文件路径,并设置好到入库,我这里只添加了HCNetSDK.lib在连接器的输入附加依赖项中。程序实现了IP,端口号,用户名和密码的设置以及预览、录像及抓图功能,全部可在示例中找到相关代码,在此不再赘述。下面主要将我遇到的问题总结如下:

在编写完所有功能代码后首次编译,弹出错误码为107,通过度娘找到网友们的解决方案,将库文件中的HCNetSDKCom文件夹和其他dll一样也拷贝至exe文件所在路径下。这样再次编译后又弹出错误码为3,即SDK未初始化,我是基于对话框编写的程序,可在OnInitDialog()中通过NET_DVR_Init()实现SDK的初始化,这个错误绝对不应该!因为这是使用SDK进行开发首先要做的。好吧,改好之后进行第三次编译,再一再二不再三,恩,应该可以了。可是纳尼?有出错了,错误码64,载入当前目录下SDK出错。难道还缺库文件,索性将库文件目录下的dll文件全都拷贝过来,第四次编译,错误码又编程4了,这是通道号错误,设备没有对应的通道号。回过头在构造函数中检查,原来讲通道号初始化成了1,将其改为0,第五次编译,终于成功了!

回过头来刚才报错64的时候我将所有dll都拷贝过来之后问题解决,但问题是有可能只是某个或某几个库的缺失带来的此错误,经过几轮测试,最终确定只需拷贝superrender.dll和audiorender.dll即可。

另外,我将综合示例也移植到了vs2015下,当然,要对sln文件和vcxproj文件做如下修改:

1、修改sln文件中第一行中的版本号,由12.0改为14.0,第二行的vs2013改为2015,第三行的版本号12.0.21005.1改为14.0.25420.1;

2、将clientdemo.vcxproj中第二行的版本由12.0改为14.0;

这样修改后在vs2015下打开,编译报错:

双击错误定位到DLLEXPORT_API所在的行,说明此宏的定义可能有错误,后来查看HCNetSDK.h文件,发现此宏定义如下:

#define DLLEXPORT _API extern"C"_declspec(dllexport),,可以看到问题就出在这里,“C”与_declspec(dllexport)之间缺少空格。修改后再次编译就没有问题了。

猜你喜欢

转载自blog.csdn.net/lovekdy/article/details/84256309