如何使用 Go 导入用 C 编写的 DLL 函数
问题:
如何你可以使用 Go 从 C 编写的 DLL 中导入函数吗,类似于中的 DllImport 属性C#.NET?
答案:
在 Go 中实现此目的有多种方法:
1. Cgo 方法:
使用 cgo 允许您访问 DLL 函数,如下所示:
import "C" func main() { C.SomeDllFunc(...) }
这种方法本质上“链接”到 DLL 库。您可以将 C 代码合并到 Go 中,并使用标准 C 方法导入它。
2. Syscall方法:
或者,您可以使用syscall包,如下所示:
import ( "fmt" "syscall" "unsafe" ) var ( 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 }
3. GitHub 资源:
有关在 Go 中使用 DLL 的详细指南,请参阅 GitHub 的文档:https://github.com/golang/go/wiki/WindowsDLLs
In总结一下,在 Go 中导入和使用 C 语言编写的 DLL 函数主要有三种方法:cgo、syscall 和上面提到的 GitHub 资源。
以上是如何将 C DLL 函数导入 Go 中?的详细内容。更多信息请关注PHP中文网其他相关文章!