美文网首页
2018-11-27 Golang与DLL交互

2018-11-27 Golang与DLL交互

作者: oracle3 | 来源:发表于2018-11-27 17:19 被阅读0次

    参考《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交互

          本文链接:https://www.haomeiwen.com/subject/toqnqqtx.html