2018-11-27 Golang与DLL交互

参考《Golang与DLL交互》,实现过程中出现了3个问题

1、32位和64位的错误

执行 go run main.go出现下面的错误:

syscall.(*LazyProc).mustFind(0xc04206c240)

        C:/tools/go/src/syscall/dll_windows.go:280 +0x5f

syscall.(*LazyProc).Call(0xc04206c240, 0xc0420100c0, 0x1, 0x1, 0x0, 0x9, 0xc04205c308, 0xc04206c1b0)

        C:/tools/go/src/syscall/dll_windows.go:301 +0x36

main.main()

        D:/temp/testdll/main.go:30 +0x1eb

exit status 2

原因是32位用32位的dll,64位用64位的dll,我的平台是64位,vs2013默认的工程是32位,需创建个64位的配置编译

2、回调函数返回值不一致

错误如下:

panic: compileCallback: output parameter size is wrong

goroutine 1 [running]:

syscall.compileCallback(0x4a8500, 0x4cad88, 0x0, 0x0)

        C:/tools/go/src/runtime/syscall_windows.go:53 +0x346

syscall.NewCallbackCDecl(0x4a8500, 0x4cad88, 0x2)

        C:/tools/go/src/syscall/syscall_windows.go:134 +0x41

main.main()

        D:/temp/testdll/main.go:37 +0x3aa

exit status 2

这个是因为原始代码有两处错误,

在c代码的错误:

typedef void(*CB_MY)(float nVal,float fVal);

应该是typedef int (*CB_MY)(float nVal,float fVal);

在go代码的错误:

func cb_my(val1 float32, val2 float32) int32

应该是

func cb_my(val1 float32, val2 float32) int

3、回调函数输出的值错误

这个没有搞明白为啥float参数打印都值都是0,我全部改int就好了(c和go代码都需要修改)

你可能感兴趣的:(2018-11-27 Golang与DLL交互)