Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tukar C kepada Golang menggunakan windows.h

Tukar C kepada Golang menggunakan windows.h

WBOY
WBOYke hadapan
2024-02-08 23:40:19463semak imbas

使用 windows.h 将 C 转换为 Golang

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.

Kandungan soalan

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

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam