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