Mengimport Fungsi DLL ke dalam Go menggunakan DllImport Equivalent
Pernyataan Masalah
Dalam C#, DllImport digunakan untuk mengimport fungsi daripada DLL yang ditulis dalam C. Adakah terdapat mekanisme yang serupa dalam Go yang membenarkan untuk mengimport fungsi DLL yang dicipta dalam C?
Penyelesaian Menggunakan CGO dan Syscall
Terdapat pelbagai pendekatan untuk mengimport fungsi DLL ke dalam Go. Satu kaedah melibatkan penggunaan pakej cgo, yang memudahkan penciptaan Go bindings untuk kod C. Dengan cgo, anda boleh memanggil terus fungsi DLL seolah-olah ia adalah fungsi Go.
Kaedah lain memanfaatkan pakej syscall. Ini membolehkan anda berinteraksi dengan API peringkat rendah sistem, termasuk pemuatan DLL dan panggilan fungsi. Dengan menguruskan memori secara eksplisit dan memanggil fungsi sistem yang diperlukan, anda boleh mengimport fungsi DLL menggunakan syscall.
Kod Contoh untuk CGO
import "C" func main() { C.SomeDllFunc(...) }
Kod Contoh untuk 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 }
Tambahan Sumber
Untuk butiran lanjut, rujuk sumber berikut:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengimport Fungsi C DLL ke dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!