Maison > développement back-end > Golang > le corps du texte

Convertir C en Golang en utilisant Windows.h

WBOY
Libérer: 2024-02-08 23:40:19
avant
443 Les gens l'ont consulté

使用 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);
}
Copier après la connexion

À 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)

}
Copier après la connexion

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)

}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!