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

使用 windows.h 將 C 轉換為 Golang

WBOY
發布: 2024-02-08 23:40:19
轉載
481 人瀏覽過

使用 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板