Importation d'une fonction DLL dans Go à l'aide de DllImport Equivalent
Énoncé du problème
En C#, DllImport est utilisé pour importer des fonctions à partir d'une DLL écrite en C. Existe-t-il un mécanisme similaire disponible dans Go qui permet d'importer Fonctions DLL créées en C ?
Solution utilisant CGO et Syscall
Il existe plusieurs approches pour importer une fonction DLL dans Go. Une méthode consiste à utiliser le package cgo, qui facilite la création de liaisons Go pour le code C. Avec cgo, vous pouvez appeler directement les fonctions DLL comme s'il s'agissait de fonctions Go.
Une autre méthode exploite le package syscall. Cela vous permet d'interagir avec les API de bas niveau du système, y compris le chargement de DLL et l'appel de fonctions. En gérant explicitement la mémoire et en appelant les fonctions système nécessaires, vous pouvez importer des fonctions DLL à l'aide de syscall.
Exemple de code pour CGO
import "C" func main() { C.SomeDllFunc(...) }
Exemple de code pour Syscall
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 }
Supplémentaire Ressources
Pour plus de détails, reportez-vous aux ressources suivantes :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!