Importieren einer DLL-Funktion in Go mit DllImport Equivalent
Problemstellung
In C#, DllImport wird zum Importieren von Funktionen aus einer in C geschriebenen DLL verwendet. Gibt es in Go einen ähnlichen Mechanismus, der das Importieren von DLLs ermöglicht? In C erstellte Funktionen?
Lösung mit CGO und Syscall
Es gibt mehrere Ansätze, eine DLL-Funktion in Go zu importieren. Eine Methode besteht in der Verwendung des cgo-Pakets, das die Erstellung von Go-Bindungen für C-Code erleichtert. Mit cgo können Sie DLL-Funktionen direkt aufrufen, als wären sie Go-Funktionen.
Eine andere Methode nutzt das Syscall-Paket. Dadurch können Sie mit den Low-Level-APIs des Systems interagieren, einschließlich DLL-Laden und Funktionsaufrufen. Durch explizites Verwalten des Speichers und Aufrufen der erforderlichen Systemfunktionen können Sie DLL-Funktionen mithilfe von Syscall importieren.
Beispielcode für CGO
import "C" func main() { C.SomeDllFunc(...) }
Beispielcode für Systemaufruf
import ( "fmt" "syscall" "unsafe" ) func main() { kernel32, _ := syscall.LoadLibrary("kernel32.dll") getModuleHandle, _ := syscall.GetProcAddress(kernel32, "GetModuleHandleW") handle := GetModuleHandle() fmt.Println(handle) } func GetModuleHandle() uintptr { var nargs uintptr = 0 ret, _, _ := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0) return ret }
Zusätzlich Ressourcen
Weitere Einzelheiten finden Sie in den folgenden Ressourcen:
Das obige ist der detaillierte Inhalt vonWie kann ich C-DLL-Funktionen in Go importieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!