Maison  >  Article  >  développement back-end  >  Convertir C en Golang en utilisant Windows.h

Convertir C en Golang en utilisant Windows.h

WBOY
WBOYavant
2024-02-08 23:40:19463parcourir

使用 windows.h 将 C 转换为 Golang

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.

Contenu de la question

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

Solution de contournement

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer