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

golang 调用 c++ dll 如何取得返回值

  •  
  •   i4color · 2021-01-25 20:31:33 +08:00 · 2304 次点击
    这是一个创建于 1423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下是 c++的方法,其中 iResult 是可以返回的,我该如何传入和取出? CreateITapTradeAPI(const ITapTrade::TapAPIApplicationInfo *appInfo, ITapTrade::TAPIINT32 &iResult);

    我现在的写法: vref2 := 0 var ref2 = uintptr(unsafe.Pointer(&vref2) ret, b, err := funcresult.Call(ref1, ref2)

    没有报错,但不知道如何取得 传出的值

    这样试过,好像不对 presult := (*byte)(unsafe.Pointer(ref2)) if (presult != nil) { data := make([]byte, 0)

    for *presult != 0 { data = append(data, *presult) ref2 += unsafe.Sizeof(byte(0)) presult = (*byte)(unsafe.Pointer(ref2))

    resultcode := binary.BigEndian.Uint32(data) //bytesBuffer := bytes.NewBuffer(data) //var tmp int32 //binary.Read(bytesBuffer, binary.BigEndian, &tmp) println(resultcode) }

    6 条回复    2021-01-30 00:30:54 +08:00
    ysc3839
        1
    ysc3839  
       2021-01-25 20:33:18 +08:00 via Android
    C++ 的导出函数一般不能跨语言调用吧,要调用的话需要包装成 C 的函数。
    dswyzx
        2
    dswyzx  
       2021-01-25 21:10:10 +08:00 via iPhone
    如果 golang 不支持,那么写个 c#调用然后暴露成 webapi ?曲线救国
    i4color
        3
    i4color  
    OP
       2021-01-25 21:52:45 +08:00
    @ysc3839 可以的。我试了另一个无参数的,就可以取得返回值,只不过他不是引用参数
    i4color
        4
    i4color  
    OP
       2021-01-25 22:18:01 +08:00
    可以了,取错值了,它直接把 vref2 这个变量改了。
    hotsymbol
        5
    hotsymbol  
       2021-01-26 01:22:08 +08:00
    i4color
        6
    i4color  
    OP
       2021-01-30 00:30:54 +08:00
    @hotsymbol 简单的没有问题
    现在第一个参数不知道怎么传了,怎么传都不对。C++本身没有问题,Demo 可以跑

    第一个参数是 *appInfo
    第二个参数是 &iResult
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1653 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:40 · PVG 00:40 · LAX 08:40 · JFK 11:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.