海康SDK二次开发cpp改成c报错解决方案(适用其它sdk二次开发)

  • Post author:
  • Post category:其他




—由于海康相机提供的例子都是c++的,所以当我们把它文件改成.c并且用gcc编译时会报错,因为它其实是做了c的处理以及函数声明。那么我们怎么找到这些函数声明并且呢?—



以下方法别的sdk开发也适用!!!

海康给我们的例子虽然没有用到c++的特性写代码,就文件都是cpp和MV_CC_OpenDevice等函数改成c编译的话也会有参数报错,这里我们直接刀枪直入,如果你的例子中用到的头文件有海康的哪个头文件,我们直接打开看一下函数声明,改就好了。我们这里依然用的是GrabImage_HighPerformance的例子,海康的头文件一般都是Mv开头,我们这个例子中呢用的是

#include "MvCameraControl.h"

我们直接 搜索#include “MvCameraControl.h”头文件在哪,显示在include下面。

find /opt/MVS -name 'MvCameraControl.h'

/opt/MVS/include/MvCameraControl.h

我们打开它

vim MvCameraControl.h

然后搜索函数直接/

/MV_CC_OpenDevice

#ifndef __cplusplus
MV_CAMCTRL_API int __stdcall MV_CC_OpenDevice(IN void* handle, IN unsigned int nAccessMode, IN unsigned short nSwitchoverKey);
#else
MV_CAMCTRL_API int __stdcall MV_CC_OpenDevice(IN void* handle, IN unsigned int nAccessMode = MV_ACCESS_Exclusive, IN unsigned short nSwitchoverKey = 0);
#endif

可以发现,海康做了c的处理,c的话他这里有三个参数,这三个参数的意思是

打开设备

参数
handle	[IN] 设备句柄
nAccessMode	[IN] 访问权限
宏定义	宏定义值	含义
MV_ACCESS_Exclusive	1	独占权限,其他APP只允许读CCP寄存器
MV_ACCESS_ExclusiveWithSwitch	2	可以从5模式下抢占权限,然后以独占权限打开
MV_ACCESS_Control	3	控制权限,其他APP允许读所有寄存器
MV_ACCESS_ControlWithSwitch	4	可以从5的模式下抢占权限,然后以控制权限打开
MV_ACCESS_ControlSwitchEnable	5	以可被抢占的控制权限打开
MV_ACCESS_ControlSwitchEnableWithKey	6	可以从5的模式下抢占权限,然后以可被抢占的控制权限打开
MV_ACCESS_Monitor	7	读模式打开设备,适用于控制权限下
nSwitchoverKey	[IN] 切换访问权限时的密钥
返回
成功,返回MV_OK;失败,返回错误码 。
备注
 • 根据设置的设备参数,找到对应的设备,连接设备。
 • 调用接口时可不传入nAccessMode和nSwitchoverKey,此时默认设备访问模式为独占权限。目前设备暂不支持MV_ACCESS_ExclusiveWithSwitch、MV_ACCESS_ControlWithSwitch、MV_ACCESS_ControlSwitchEnable、MV_ACCESS_ControlSwitchEnableWithKey这四种抢占模式。
 • 对于U3V设备,nAccessMode、nSwitchoverKey这两个参数无效。

我这里直接后面两个参数不需要直接照填就好了

MV_CC_OpenDevice(handle, MV_ACCESS_Exclusive, 0)

后面如果还有类似错误按照此方法照改即可。记得把Makefile和文件的cpp改成c噢

后续我也在做相关的配置,如果有好的建议或者提醒等等也希望指导一番,如果你按照我的文章遇到了什么问题,或者你也解决了我文章错误的地方也往评论告诉我,非常感谢!我也是最近开始写文档,也是我的开始,后面会接着写海康或者各种知识与大家共同解决问题,学习。还望给个赞支持一下。



版权声明:本文为qqh2411988311原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。