Heim  >  Artikel  >  Backend-Entwicklung  >  Konvertieren Sie C mit Windows.h in Golang

Konvertieren Sie C mit Windows.h in Golang

WBOY
WBOYnach vorne
2024-02-08 23:40:19463Durchsuche

使用 windows.h 将 C 转换为 Golang

Der PHP-Editor Zimo stellt Ihnen vor, wie Sie Windows.h verwenden, um C-Sprachcode in Golang zu konvertieren. Windows.h ist die Header-Datei des Windows-Betriebssystems, die viele Funktionen und Datentypen enthält, die für die Systemprogrammierung verwendet werden. Durch die Konvertierung von C-Code in Golang können wir die Windows-API in der Golang-Umgebung verwenden, um eine effizientere und flexiblere Programmentwicklung zu erreichen. In diesem Artikel werden Ihnen die Konvertierungsschritte und Vorsichtsmaßnahmen im Detail vorgestellt, damit Sie die Konvertierung von C nach Golang erfolgreich abschließen und die Entwicklungseffizienz und Codequalität verbessern können.

Frageninhalt

Ich möchte diesen Code in die C-Sprache konvertieren und es funktioniert großartig

#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);
}

Zur Sprache für unterwegs. Ich habe gerade diesen Trick ausprobiert und er hat nicht funktioniert:

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)

}

Aber es funktioniert nicht. Irgendwelche Vorschläge?

Danke

Problemumgehung

Der Fehler ist der &-Operator in unsicheren Zeigern. Die getprocaddress-Methode gibt bereits einen uintptr zurück.

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 meldet möglichen Funktionsmissbrauch. Dies ist jedoch richtig: Konvertierung von uintptr in unsafe.pointer zulassen, wenn es auf den Non-Go-Speicher #58625 zeigt

Das obige ist der detaillierte Inhalt vonKonvertieren Sie C mit Windows.h in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen