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

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

Susan Sarandon
リリース: 2024-12-10 18:06:11
オリジナル
675 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート