V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
rnicrosoft

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

  •  
  •   rnicrosoft · Mar 9, 2021 · 2567 views
    This topic created in 1884 days ago, the information mentioned may be changed or developed.

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