`//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的字符串,望解答。
有疑问加站长微信联系(非本文作者)