【疑难杂症】【GC】Go 程序调用 Windows DLL 的正确姿势是什么?

goroution · · 4387 次点击
win64问,无法重现你这个bug,无论我是删掉go:uintptrescapes 这行注释,还是加上这行。我是直接编译成.exe文件再执行的,没用 go run 这种方式。
#4
更多评论
以上描述及代码都基于 Go 1.7,开发环境分别为 MacBook 和 Windows Server
#1
func StrPtr(s string) uintptr { ptr, err := syscall.BytePtrFromString(s) if err != nil { fmt.Println(err) } return uintptr(unsafe.Pointer(ptr)) } 你的这个问题是因为Go中字符串的类型结构不是C中的纯[]byte,调用系统专用转换函数syscall.BytePtrFromString 就可以了。这个函数会把string类型先转换成连续的[]byte并返回首指针
#2