Rumah > Artikel > pembangunan bahagian belakang > Tukar C kepada Golang menggunakan windows.h
PHP editor Zimo akan memperkenalkan anda cara menggunakan windows.h untuk menukar kod bahasa C kepada Golang. Windows.h ialah fail pengepala sistem pengendalian Windows, yang mengandungi banyak fungsi dan jenis data yang digunakan untuk pengaturcaraan sistem. Dengan menukar kod C kepada Golang, kami boleh menggunakan API Windows dalam persekitaran Golang untuk mencapai pembangunan program yang lebih cekap dan fleksibel. Artikel ini akan memperkenalkan anda kepada langkah penukaran dan langkah berjaga-jaga secara terperinci untuk membantu anda berjaya menyelesaikan penukaran daripada C ke Golang dan meningkatkan kecekapan pembangunan dan kualiti kod.
Saya mahu menukar kod ini kepada bahasa c dan ia berfungsi dengan baik
#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); }
Bahasa pergi. Saya baru sahaja mencuba helah ini dan ia tidak berjaya:
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) }
Tetapi ia tidak berkesan. Sebarang cadangan?
Terima kasih
Ralat adalah & pengendali dalam penunjuk tidak selamat. Kaedah getprocaddress sudah mengembalikan 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 akan melaporkan kemungkinan penyalahgunaan ciri. Walau bagaimanapun, ini betul: benarkan penukaran uintptr kepada unsafe.pointer apabila ia menunjuk ke memori bukan pergi #58625
Atas ialah kandungan terperinci Tukar C kepada Golang menggunakan windows.h. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!