我正在寻找一个示例代码,如何从用C编写的dll导入函数,相当于DllImport
C#.NET
。这是可能的?
我正在使用Windows。
任何帮助表示赞赏。提前致谢。
答案 0 :(得分:5)
使用与Go的Windows端口相同的方法。请参阅Go syscall包的Windows实现的源代码。另外,请查看实验性Go exp/wingui包的源代码
答案 1 :(得分:4)
答案 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
有三种基本方法可以做到。