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

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

Linda Hamilton
リリース: 2024-12-05 07:47:12
オリジナル
462 人が閲覧しました

How to Import a C DLL Function into Go?

Go を使用して C で書かれた DLL 関数をインポートする方法

質問:

方法の DllImport 属性と同様に、Go を使用して C で書かれた DLL から関数をインポートできますか? C#.NET?

答え:

Go でこれを実現するには、いくつかのアプローチがあります:

1. Cgo メソッド:

cgo を使用すると、次のように DLL 関数にアクセスできます。

import "C"

func main() {
    C.SomeDllFunc(...)
}
ログイン後にコピー

このアプローチは、基本的に DLL ライブラリに「リンク」します。 C コードを Go に組み込み、標準の C メソッドを使用してインポートできます。

2. Syscall メソッド:

または、以下に示すように syscall パッケージを使用することもできます:

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

var (
    kernel32, _        = syscall.LoadLibrary("kernel32.dll")
    getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")
)

func GetModuleHandle() (handle uintptr) {
    var nargs uintptr = 0
    if ret, _, callErr := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0); callErr != 0 {
        abort("Call GetModuleHandle", callErr)
    } else {
        handle = ret
    }
    return
}
ログイン後にコピー

3. GitHub リソース:

Go での DLL の使用に関する詳細なガイドについては、https://github.com/golang/go/wiki/WindowsDLLs

In にある GitHub のドキュメントを参照してください。要約すると、Go 内で C で記述された DLL 関数をインポートして使用するには、cgo、syscall、および前述の GitHub リソースの 3 つの主な方法があります。上。

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

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