V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
rnicrosoft
V2EX  ›  Go 编程语言

请教一个 Golang 调用 C++链接库的问题

  •  
  •   rnicrosoft · 2021-03-09 11:43:24 +08:00 · 1882 次点击
    这是一个创建于 1384 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一台设备,通过网线连接,但是通信协议是不公开的。国内经销商提供了.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 ...
    }
    
    7 条回复    2021-03-18 00:05:04 +08:00
    ysc3839
        1
    ysc3839  
       2021-03-09 12:13:42 +08:00 via Android
    C++ 没有标准 ABI,一般只能用同一套编译器来调用。这种情况建议包装一下,导出成 C 函数接口给 Golang 使用。
    jones2000
        2
    jones2000  
       2021-03-09 12:15:18 +08:00
    用 C 标准把你的 c++dll 接口重新封装下.
    rnicrosoft
        3
    rnicrosoft  
    OP
       2021-03-10 14:38:20 +08:00
    @ysc3839 目前是包装成一个软件后再从网络发出来,就是觉得分开开发和运行太麻烦了。导出接口给 golang 调用的办法好像不太行,接收数据后发起调用的是 c++链接库里发起的
    rnicrosoft
        4
    rnicrosoft  
    OP
       2021-03-10 14:39:20 +08:00
    @jones2000 没法重新封装,dll 的源代码在设备厂家手里我们没有,也不会给我们的
    ysc3839
        5
    ysc3839  
       2021-03-10 16:20:06 +08:00 via Android
    @rnicrosoft 为什么不可行?重新封装不需要源代码呀。
    rnicrosoft
        6
    rnicrosoft  
    OP
       2021-03-10 19:00:05 +08:00 via Android
    @ysc3839 因为之前没这么做过,都是 golang 调用 dll 里一个计算函数,算完就返回值给 golang 了。没接触过由 dll 主动发起调用的,也没找到相关的样例
    zzn
        7
    zzn  
       2021-03-18 00:05:04 +08:00
    看看 SWIG ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:08 · PVG 10:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.