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.
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
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!