有一台设备,通过网线连接,但是通信协议是不公开的。国内经销商提供了.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 ? |