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

2021-01-25 20:31:33 +08:00
 i4color

以下是 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) }

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

第一个参数是 *appInfo
第二个参数是 &iResult

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX