Pengenalan:
Mengakses fungsi COM (Model Objek Komponen) dari dalam Pergi boleh memberikan cabaran. Artikel ini bertujuan untuk menangani isu ini dengan membimbing anda melalui proses memanggil kaedah COM daripada Go, menggunakan contoh khusus untuk menggambarkan teknik tersebut.
Latar Belakang:
Percubaan kod yang disediakan untuk menggunakan kaedah ConnectServer bagi Windows DLL melalui fungsi DllGetClassObject. Walau bagaimanapun, pengkompil menimbulkan ralat kerana penggunaan syscall yang salah.LazyProc.
Penyelesaian:
Untuk menyelesaikan ralat, perlu menggunakan kaedah Panggilan syscall .LazyProc untuk meluluskan hujah yang sesuai, ditukar kepada uintptrs, mengikut tandatangan DllGetClassObject. Kod di bawah menggariskan pengubahsuaian:
<code class="go">ret, _, _ := getClassObject.Call(rclsid, riid, ppv)</code>
Pembungkusan Objek COM:
Setelah objek COM diperoleh, jenis pembalut Go boleh dibuat untuk membolehkan interaksi dengan kaedahnya. Ini melibatkan penentuan jenis tersuai dengan penunjuk vtbl (jadual maya) dan memperkenalkan kaedah yang sepadan dengan fungsi objek COM.
Contoh:
Untuk objek XA_Session hipotesis dengan ConnectServer dan kaedah DisconnectServer, pembalut Go mungkin kelihatan seperti ini:
<code class="go">type XASession struct { vtbl *xaSessionVtbl } func (obj *XASession) ConnectServer(id int) int { ret, _, _ := syscall.Syscall( obj.vtbl.ConnectServer, // function address 2, // number of parameters to this function uintptr(unsafe.Pointer(obj)), // always pass the COM object address first uintptr(id), // then all function parameters follow 0, ) return int(ret) } func (obj *XASession) DisconnectServer() { syscall.Syscall( obj.vtbl.DisconnectServer, 1, uintptr(unsafe.Pointer(obj)), 0, 0, ) }</code>
Dengan menggunakan pendekatan ini, ia menjadi mungkin untuk berinteraksi dengan objek COM dan mengakses kaedahnya dengan lancar dari dalam Go.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Fungsi COM daripada Go Menggunakan Fungsi `DllGetClassObject`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!