有一台设备,通过网线连接,但是通信协议是不公开的。国内经销商提供了.h 头文件、dll 和 lib 链接库的 SDK,以及一套 qt c++写的 demo 。现在希望能融入我们自己原有用 golang 写的系统中,请问该怎么调用呢?网上没找到类似的,都是些 syscall 调用链接库函数做计算的简单案例。cgo 在这种情况下能用吗?
其中,链接库中有虚函数接口,会被一直调用来更新数据,需要实现这个函数来定义数据接收处理办法:
链接库.h 头文件中包含
class A {
public:
virtual void updateData(const tData *data) = 0;
};
在 demo 里
class B : public A {
virtual void updateData(const tData *data);
};
void B::updateData(const tData *data) {
// process data below ...
}
1
ysc3839 2021-03-09 12:13:42 +08:00 via Android
C++ 没有标准 ABI,一般只能用同一套编译器来调用。这种情况建议包装一下,导出成 C 函数接口给 Golang 使用。
|
2
jones2000 2021-03-09 12:15:18 +08:00
用 C 标准把你的 c++dll 接口重新封装下.
|
3
rnicrosoft OP @ysc3839 目前是包装成一个软件后再从网络发出来,就是觉得分开开发和运行太麻烦了。导出接口给 golang 调用的办法好像不太行,接收数据后发起调用的是 c++链接库里发起的
|
4
rnicrosoft OP @jones2000 没法重新封装,dll 的源代码在设备厂家手里我们没有,也不会给我们的
|
5
ysc3839 2021-03-10 16:20:06 +08:00 via Android
@rnicrosoft 为什么不可行?重新封装不需要源代码呀。
|
6
rnicrosoft OP @ysc3839 因为之前没这么做过,都是 golang 调用 dll 里一个计算函数,算完就返回值给 golang 了。没接触过由 dll 主动发起调用的,也没找到相关的样例
|
7
zzn 2021-03-18 00:05:04 +08:00
看看 SWIG ?
|