咨询个go编译DLL并调用的报错的问题

hellsam · · 3063 次点击
jan-bar
想要拥有,必定付出。
我也懵逼了,我发现导出下面这个方法,其他地方调用dll都报错,我看貌似是申请了堆内存。你的`str:="xxx"`实际上是栈内存,函数调用完就释放了。但是只要我在函数里面使用的方法会申请堆内存就会报错。我平时都是调用别人的dll,没用用go编写dll,我也坐等大神解惑额。还有就是`cgo`申请的内存不被Go接管,所以必须手动释放,因此`msg2 = C.CString(str)`申请了C内存,没有报错,至于啥地方释放就得你编写代码额。详情参考:[Go源码注释](https://github.com/golang/go/blob/c85848a4a62f839427bb56cb2772e008e405cf1f/src/cmd/cgo/doc.go#L269) ![image.png](https://static.golangjob.cn/221201/60ce58ffed1ac30e1fcab3c61c8aae6f.png) ```go //export PrintBye func PrintBye() { fmt.Println("From DLL: Bye!") } ```
#5
更多评论
jan-bar
想要拥有,必定付出。
我怀疑`syscall.StringToUTF16Ptr`用的不对,改为`syscall.StringBytePtr`试试看。前者转换的结果是双字节数据,和`*C.char`内存布局不同。
#1
刚试了 也不行
#2