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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-05 07:47:12431ブラウズ

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

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