L'éditeur PHP Zimo vous présentera comment utiliser windows.h pour convertir le code du langage C en Golang. Windows.h est le fichier d'en-tête du système d'exploitation Windows, qui contient de nombreuses fonctions et types de données utilisés pour la programmation du système. En convertissant le code C en Golang, nous pouvons utiliser l'API Windows dans l'environnement Golang pour obtenir un développement de programme plus efficace et plus flexible. Cet article vous présentera en détail les étapes de conversion et les précautions pour vous aider à réussir la conversion de C vers Golang et à améliorer l'efficacité du développement et la qualité du code.
Je souhaite convertir ce code en langage C et cela fonctionne très bien
#include <windows.h> void main() { double* mdl_g; void* dll = loadlibrary("./test_win64.dll"); mdl_g = ((double*)getprocaddress(dll, "g")); printf("g = %.2f",*mdl_g); }
À la langue à emporter. Je viens d'essayer cette astuce et ça n'a pas fonctionné :
func main() { dll, _ := syscall.LoadDLL("./test_win64.dll") mdl_G, _ := syscall.GetProcAddress(dll.Handle, "G") real_G := (*float64)(unsafe.Pointer(&mdl_G)) log.Print(*real_G) }
Mais ça ne marche pas. Aucune suggestion?
Merci
L'erreur est l'opérateur & dans les pointeurs dangereux. La méthode getprocaddress renvoie déjà un uintptr.
func main() { dll, _ := syscall.LoadDLL("./test_win64.dll") mdl_G, _ := syscall.GetProcAddress(dll.Handle, "G") real_G := (*float64)(unsafe.Pointer(mdl_G)) // this conversion is safe. log.Print(*real_G) }
go vet signalera un éventuel abus de fonctionnalités. Cependant, c'est correct : autoriser la conversion de uintptr en unsafe.pointer lorsqu'il pointe vers une mémoire non accessible #58625
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!