前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2018-11-27 Golang与DLL交互

2018-11-27 Golang与DLL交互

作者头像
oracle3
发布2022-05-13 08:33:03
3870
发布2022-05-13 08:33:03
举报
文章被收录于专栏:oracle3技术大杂烩

参考《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代码都需要修改)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、32位和64位的错误
  • 2、回调函数返回值不一致
  • 3、回调函数输出的值错误
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档