首頁 > 後端開發 > Golang > 如何將 C DLL 函數導入 Go 中?

如何將 C DLL 函數導入 Go 中?

Susan Sarandon
發布: 2024-12-10 18:06:11
原創
728 人瀏覽過

How Can I Import C DLL Functions into Go?

使用DllImport 等效項將DLL 函數導入到Go 中

問題陳述

在C# 中, DllImport 用於從C 編寫的DLL中導入函數。 Go 中是否有類似的機制允許導入用 C 建立的 DLL 函數?

使用 CGO 和 Syscall 的解

導入 DLL 函數有多種方法進入圍棋。一種方法涉及使用 cgo 套件,這有助於為 C 程式碼建立 Go 綁定。使用 cgo,您可以像呼叫 Go 函數一樣直接呼叫 DLL 函數。

另一種方法是利用 syscall 套件。這允許您與系統的低階 API 進行交互,包括 DLL 載入和函數呼叫。透過明確管理記憶體並呼叫必要的系統函數,您可以使用 syscall 導入 DLL 函數。

CGO 的範例程式碼

import "C"

func main() {
    C.SomeDllFunc(...)
}
登入後複製

CGO的範例程式碼Syscall

import (
    "fmt"
    "syscall"
    "unsafe"
)

func main() {
    kernel32, _ := syscall.LoadLibrary("kernel32.dll")
    getModuleHandle, _ := syscall.GetProcAddress(kernel32, "GetModuleHandleW")

    handle := GetModuleHandle()
    fmt.Println(handle)
}

func GetModuleHandle() uintptr {
    var nargs uintptr = 0
    ret, _, _ := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0)
    return ret
}
登入後複製

其他資源

有關更多詳細信息,請參閱以下資源:

  • [在Windows](https://github.com/golang/go/wiki/WindowsDLLs)

以上是如何將 C DLL 函數導入 Go 中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板