go:linkname 向动态库传递字符串无法识别

andyco · · 1175 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

`//go:linkname Gofun Dllfun` `func Gofun(*C.char) *C.char` ``` func main() { s := C.CString("hello") defer C.free(unsafe.Pointer(s)) fmt.Println(C.GoString(Gofun(s))) }``` 代码如上,由于一些原因没法使用C.Dllfun,无意中发现神奇的linkname 可以连接第三方C动态库函数,使用C.CString转成C.char后传递字符串,但是并没有返回值,但是别的函数int可以传递,`func Gofun(C.int) C.int`,返回值是int,bool的都能成功,就是无法接收和传递C.char。怀疑是GO字符串结尾没有`\0`造成的不兼容,我就在后面加个`\x00`,` C.CString("hello\x00")`,部分函数可以成功调用了,但还是有些还是无法识别C.char的字符串,望解答。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1175 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传