有几种方法可以做到这一点。
cgo方式允许您以这种方式调用函数:
import ("C")
...
C.SomeDllFunc(...)
Run Code Online (Sandbox Code Playgroud)
它将基本上通过“链接”到库来调用库。您可以将C代码放入Go中并导入常规C方式。
还有更多方法,例如syscall
import (
"fmt"
"syscall"
"unsafe"
)
// ..
kernel32, _ = syscall.LoadLibrary("kernel32.dll")
getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")
Run Code Online (Sandbox Code Playgroud)
...
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
}
Run Code Online (Sandbox Code Playgroud)
有一个有用的github页面,它描述了使用DLL的过程:https : //github.com/golang/go/wiki/WindowsDLLs
有三种基本方法可以做到这一点。