求助:关于C++builder调用海康威视SDK(VM)二次开发

m0_37582316 2019-01-10 09:25:55
小弟初学者,最近自己在摸索一个小项目,关于海康SDK的二次开发,用的是C++builder 。在这之中的调用部分出了点问题。希望求助各位大神!

这是关于海康算子的说明书,其中要去创建一个句柄才能进行后面的步骤。我并不清楚其中的具体意义。我也只是按照一般调用步骤,从海康dll中生成C++builder可用的.lib文件,将.dll .lib .h加入工程中。在.cpp文件开头进行声明
接下来的问题有几点,首先是我用button控件去触发调用函数,在button中 应该怎样写具体的内容呢(之前的视觉部分算子我是自己用halcon写过一些简单的,也调用成功了。但是这次不知道该如何调用了。毕竟之前的只需要通过全局变量导入图片和输出结果,再在button里面加一个action(); 就可以了)?
第二是在网上查到的动态静态方法我试验过,存在一些问题,也不清楚是我的语法问题还是算子的调用方式有问题。例如:
希望各位大神不吝赐教!小弟在此十分感谢!
...全文
1336 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2020-10-24
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
首先要把返回的handle保存起来,用全局变量,或者主窗体的成员变量也可以。
链接时符号没找到,库已经添加到工程了,要么是库的路径没设置,要么库格式有问题。如果你是建的32位项目,要用implib建立导入库,如果64位,要用mkexp。


引用 10 楼 h2plus0 的回复:
dumpbin /exports HCNetSDK.dll

检查一下它里面的导出函数名有没有 _ 开头, 因为 implib -af
加了 -a 参数, 不知道是不是因为这些导致没匹配。

dumpbin 是 Visual Stduio 带的工具

mark
  • 打赏
  • 举报
回复 1
下载这个目标文件格式转换工具:https://www.agner.org/optimize/objconv.zip,需要VC++运行库,如果你的电脑上没有的话,下载:https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

h2plus0 2020-10-23
  • 打赏
  • 举报
回复
dumpbin /exports HCNetSDK.dll 检查一下它里面的导出函数名有没有 _ 开头, 因为 implib -af 加了 -a 参数, 不知道是不是因为这些导致没匹配。 dumpbin 是 Visual Stduio 带的工具
weixin_50869063 2020-10-21
  • 打赏
  • 举报
回复
D:\Borland\CBuilder6\Projects\SDK Demo>coff2omf -lib:ms HCNetSDK.lib bcb HCNetSDKBCB.lib
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporation
ERROR: COFF error: HCNetSDK.lib
(coffread.cpp, 1502) : invalid machine type detected

这个也出错,麻烦给看看,谢谢!
weixin_50869063 2020-10-21
  • 打赏
  • 举报
回复
按照implib HCNetSDK.lib HCNetSDK.dll,也生成了相应的lib文件,但编译还是出错
m0_37582316 2019-01-11
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
首先要把返回的handle保存起来,用全局变量,或者主窗体的成员变量也可以。 链接时符号没找到,库已经添加到工程了,要么是库的路径没设置,要么库格式有问题。如果你是建的32位项目,要用implib建立导入库,如果64位,要用mkexp。
您好!库的路径已经设置 implib和coff2omf这两个工具都已经试过了,错误提示和原帖中的一样,无法链接(我是把这两个工具复制到别的地方,生成的lib文件)。至于是32 还是 64 位的项目,请问该怎么辨别呢?
m0_37582316 2019-01-11
  • 打赏
  • 举报
回复
引用 2 楼 zhgwbzhd 的回复:
我用海康的接口,用过两种方式,都是正常的。 方式1:直接采用动态库调用方式,把自己用到的接口函数都要单独写一遍动态加载的方式。运行正常,就是复杂点。 方式2:将HCNetSDK.lib复制到bcb的bin目录,运行coff2omf -lib:ms HCNetSDK.lib bcb HCNetSDK_BCB.lib,生成一个lib文件,将这个lib库加到自己的项目中。#include "HCNetSDK.h"也需要声明一下,使用时直接可以按照C的函数来使用,非常方便。 方式3:将HCNetSDK.dll复制到bcb的bin目录,运行implib -af HCNetSDK_BCB.lib HCNetSDK.dll,生成的lib库使用时会报错。我就没再研究怎么用了。
您好!关于方式1,可否给一个动态调用的实例代码?我自己目前写的都是参照资料,有些并没有解释得很清楚。您的方式3我也试过了,用implib生成的dll文件目前确实会有问题(尚不确定是语法问题还是lib问题)。关于您的方式2,我是把coff2omf这个应用程序移到了别处生成lib,复制到同一目录,然后右键project ,add .lib ;同时在.cpp前面也声明了#include "iMVS-6000PlatformSDKC.h" ,报错和帖子里的图一样...
draculamx 2019-01-11
  • 打赏
  • 举报
回复
implib -a f HCNetSDK_BCB.lib HCNetSDK.dll,用这个就行了,直接由海康的DLL,生成BCB能用的LIB文件
但是有一点,你不要使用-a参数,直接使用:
implib HCNetSDK.lib HCNetSDK.dll 就行了,lib文件不要改文件名,文件名和dll文件名相同
  • 打赏
  • 举报
回复
你这个可能是老版本吧,那就只有32位的。设置库路径:project->options->C++(shared options)右边library path
zhgwbzhd 2019-01-10
  • 打赏
  • 举报
回复
我用海康的接口,用过两种方式,都是正常的。
方式1:直接采用动态库调用方式,把自己用到的接口函数都要单独写一遍动态加载的方式。运行正常,就是复杂点。
方式2:将HCNetSDK.lib复制到bcb的bin目录,运行coff2omf -lib:ms HCNetSDK.lib bcb HCNetSDK_BCB.lib,生成一个lib文件,将这个lib库加到自己的项目中。#include "HCNetSDK.h"也需要声明一下,使用时直接可以按照C的函数来使用,非常方便。

方式3:将HCNetSDK.dll复制到bcb的bin目录,运行implib -af HCNetSDK_BCB.lib HCNetSDK.dll,生成的lib库使用时会报错。我就没再研究怎么用了。
  • 打赏
  • 举报
回复
首先要把返回的handle保存起来,用全局变量,或者主窗体的成员变量也可以。
链接时符号没找到,库已经添加到工程了,要么是库的路径没设置,要么库格式有问题。如果你是建的32位项目,要用implib建立导入库,如果64位,要用mkexp。

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧