同等の 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 }
追加リソース
詳細については、次のリソースを参照してください:
以上がC DLL 関数を Go にインポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。