首頁  >  文章  >  後端開發  >  使用 windows.h 將 C 轉換為 Golang

使用 windows.h 將 C 轉換為 Golang

WBOY
WBOY轉載
2024-02-08 23:40:19462瀏覽

使用 windows.h 将 C 转换为 Golang

php小編子墨將為您介紹如何使用windows.h將C語言程式碼轉換為Golang。 Windows.h是Windows作業系統的頭文件,其中包含了許多用於系統程式設計的函數和資料類型。透過將C程式碼轉換為Golang,我們可以在Golang環境中使用Windows API,實現更有效率和更靈活的程式開發。本文將為您詳細介紹轉換步驟和注意事項,幫助您順利完成C到Golang的轉換,並提升開發效率和程式碼品質。

問題內容

我想將此程式碼轉換為 c 語言,效果很好

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

到 go 語言。我剛剛嘗試了這個技巧,但不起作用:

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)

}

但是不起作用。 有什麼建議嗎?

謝謝

解決方法

錯誤是不安全指標中的&運算子。 getprocaddress 方法已經回傳一個 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 將報告可能的功能濫用。但是,這是正確的: allow conversion of uintptr to unsafe.pointer when it point to non-go內存#58625

以上是使用 windows.h 將 C 轉換為 Golang的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除