美文网首页
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交互

    参考《Golang与DLL交互》,实现过程中出现了3个问题 1、32位和64位的错误 执行 go run main...

  • Lua与C#交互原理

    Lua与C#交互原理 C#与Lua的交互主要是由Lua官方的提供的LuaInterface.dll库实现的。(1)...

  • golang调用DLL中的函数

    在golang中加载dll并调用函数流程如下:1.加载dll动态库到内存 syscall.LoadLibrary2...

  • JNI技术实践小节

    1、目前java与dll交互的技术主要有3种:jni,jawin和jacob。Jni(Java Native In...

  • Golang学习笔记之Golang与Mysql交互

    Go标准库中没有数据库驱动。参见http://golang.org/s/sqldrivers获取第三方驱动。这里选...

  • C#与Lua交互过程和原理

    C#与Lua交互过程: C# Call Lua :由C#文件先调用Lua解析器底层dll库(由C语言编写),再由d...

  • Java_SAP RFC

    Java 和 SAP 数据交互 RFC 模式 引入相关 sapjco3.jar 和 sapjco.dll 。 说明...

  • C# 调用 Golang DLL

    1. 编写Go文件 注意,import "C" 需要系统中安装gcc,否则会报错: exec: "gcc": ex...

  • C++编写dll与调用

    重要参考 c++ dll编写与加载;C++编程笔记:dll的生成与使用;8.DLL导出C++类; 在 Visual...

  • Rust与C#交互——生成DLL库

    0x00 开篇(Intro) Rust的强大之处只有你想不到,没有它做不到。既然是打折取代C++语言的旗号,那么肯...

网友评论

      本文标题:2018-11-27 Golang与DLL交互

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