golang 调用 c++ DLL 如何获取 dll 返回的 string 类型值

gouser · · 6766 次点击
s3 := make([]byte, 256) call里面就用 uintptr(unsafe.Pointer(&s3[0])) 这样的s3就可以接收返回值了
#5
更多评论
C++返回值应该是 char* ,返回的是指针,然后在Go中对这个int类型进行转换变成 指向 byte的指针,解引用就读出了这个 字节的值。C++中char* 类型是连续内存结构,最后以'0x00‘结尾,所以每读取依次 byte 对传回来的 指针进行偏移1 操作直到读取到'0x00‘ 认为是结尾。再把这个[]byte转换成 string就可以了。 首先要明确就是就是C++中的编码形式。
#1
首先三叩九拜跪谢大神。 其次有几个问题想请教下: 1. 目前 c++ 这边如果返回一个指针,显然不能返回栈上开辟的,也就是应该搞个 new 出来的玩意返回,否则c++函数返回后,go这边得到的是一个已经被释放了的,但是问题来了,go得到这个指针后,又不能释放,是不是造成了内存泄漏? 2. c++ 这边的返回 char 应该如何被 go 转换呢,新手不懂 ^_^ 再次六体投地请大神解答
#2