ホームページ >バックエンド開発 >Golang >C DLL 関数を Go にインポートするにはどうすればよいですか?

C DLL 関数を Go にインポートするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-10 18:06:11656ブラウズ

How Can I Import C DLL Functions into Go?

同等の DllImport を使用して DLL 関数を Go にインポートする

問題ステートメント

C# では、 DllImport は、C で書かれた DLL から関数をインポートするために使用されます。 C で作成された DLL 関数をインポートできる同様のメカニズムが Go にもありますか?

CGO と Syscall を使用した解決策

DLL 関数をインポートするには複数の方法があります囲碁に。 1 つの方法では、C コードの Go バインディングの作成を容易にする cgo パッケージを使用します。 cgo を使用すると、Go 関数であるかのように DLL 関数を直接呼び出すことができます。

別の方法では、syscall パッケージを利用します。これにより、DLL の読み込みや関数呼び出しなど、システムの低レベル API を操作できるようになります。メモリを明示的に管理し、必要なシステム関数を呼び出すことで、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 での DLL の使用](https://github.com/golang/go/wiki/ WindowsDLL)

以上がC DLL 関数を Go にインポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。