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

如何使用GO导入用C编写的DLL函数?,c,dll,import,go,C,Dll,Import,Go,我正在寻找如何从用C编写的dll导入函数的示例代码。相当于C#NET的DllImport。有可能吗? 我正在使用windows。 感谢您的帮助。提前谢谢 您想使用的这是一个介绍。使用与Windows Go端口相同的方法。请参阅Go软件包的Windows实现的源代码。另外,请看一下实验性Go软件包的源代码。有几种方法可以做到这一点 cgo方式允许您通过以下方式调用函数: import ("C") ... C.SomeDllFunc(...) 它基本上通过与库“链接”来调用库。您可以将C代码放入G

我正在寻找如何从用C编写的dll导入函数的示例代码。相当于
C#NET的
DllImport
。有可能吗? 我正在使用windows。
感谢您的帮助。提前谢谢

您想使用的这是一个介绍。

使用与Windows Go端口相同的方法。请参阅Go软件包的Windows实现的源代码。另外,请看一下实验性Go软件包的源代码。有几种方法可以做到这一点

cgo方式允许您通过以下方式调用函数:

import ("C")
...
C.SomeDllFunc(...)
它基本上通过与库“链接”来调用库。您可以将C代码放入Go并以常规C方式导入

还有更多的方法,比如syscall

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

// ..

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

有一个有用的github页面,描述了使用DLL的过程:


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

提前,感谢您的回复。我收到以下错误:
buildpackagemain:[C:/Go/bin/8g-o teste\u Go\u8 main.Go]main.Go:5:找不到导入:C错误,退出状态1退出状态1
我如何修复它?@TheMask:这可能是另一个问题的主题。我不知道如何使用Go-on Windows,但我的第一个猜测是检查您的环境变量。@Mask:您能将您的错误和修复方法作为不同的问题(和答案)发布吗?这可能对未来的求职者有所帮助。这是一个很好的资源
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
}