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

Konvertieren Sie C mit Windows.h in Golang

WBOY
Freigeben: 2024-02-08 23:40:19
nach vorne
481 Leute haben es durchsucht

使用 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);
}
Nach dem Login kopieren

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)

}
Nach dem Login kopieren

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)

}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage