如何使用GO导入用C编写的DLL函数?

时间:2011-11-22 18:12:50

标签: c dll import go

我正在寻找一个示例代码,如何从用C编写的dll导入函数,相当于DllImport C#.NET。这是可能的? 我正在使用Windows。 任何帮助表示赞赏。提前致谢。

3 个答案:

答案 0 :(得分:5)

使用与Go的Windows端口相同的方法。请参阅Go syscall包的Windows实现的源代码。另外,请查看实验性Go exp/wingui包的源代码

答案 1 :(得分:4)

您想使用cgoHere是一个介绍。

答案 2 :(得分:4)

有几种方法可以做到这一点。

cgo方式允许您以这种方式调用函数:

import ("C")
...
C.SomeDllFunc(...)

它将基本上通过"链接"来调用库。反对图书馆。您可以将C代码放入Go并导入常规C方式。

还有更多方法,例如系统调用

import (
    "fmt"
    "syscall"
    "unsafe"
)

// ..

kernel32, _        = syscall.LoadLibrary("kernel32.dll")
getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")

...

func GetModuleHandle() (handle uintptr) {
    var nargs uintptr = 0
    if ret, _, callErr := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0); callErr != 0 {
    abort("Call GetModuleHandle", callErr)
    } else {
        handle = ret
    }
    return
}

这个有用的github页面描述了使用DLL的过程: https://github.com/golang/go/wiki/WindowsDLLs

有三种基本方法可以做到。