—由于海康相机提供的例子都是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 版权协议,转载请附上原文出处链接和本声明。