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

hellsam · · 2996 次点击
刚试了 也不行
#2
更多评论
jan-bar
想要拥有,必定付出。
我怀疑`syscall.StringToUTF16Ptr`用的不对,改为`syscall.StringBytePtr`试试看。前者转换的结果是双字节数据,和`*C.char`内存布局不同。
#1
jan-bar
想要拥有,必定付出。
![image.png](https://static.golangjob.cn/221201/a9658d2274f76a4f73a3f1314b039f6b.png) 但是我试过可以啊。还有就是关于dll用法,一般都不会返回数据吧,而是传入参数(分配的内存,例如结构体之类的),由dll往入参内存里面写入数据,并返回写入数据长度。我看window相关dll都是这样方式返回调用方数据。你这里由dll申请C内存`msg2 = C.CString(str)`如果不找地方释放感觉会有内存泄露。通过入参传入内存块是调用方的内存,所以释放也是调用方的事情。
#3