


Bagaimana untuk Memanggil Kaedah COM daripada Go Menggunakan syscall.LazyProc?
Oct 31, 2024 am 03:48 AMMenggunakan COM dalam Go
Masalah
Anda ingin menggunakan fail Windows DLL dalam program Go anda, tetapi anda menghadapi ralat apabila memanggil kaedah COM.
Penyelesaian
Apabila memanggil kaedah COM daripada Go menggunakan syscall.LazyProc, anda perlu menggunakan fungsi Panggilan yang disediakan oleh objek LazyProc. Fungsi Panggilan menjangkakan semua parameter akan diluluskan sebagai uintptrs.
Sebagai contoh, mari kita ambil fungsi DllGetClassObject daripada contoh pembungkus Direct3D9 Go yang disebut dalam urutan yang dirujuk. Tandatangannya ialah:
HRESULT __stdcall DllGetClassObject( _In_ REFCLSID rclsid, _In_ REFIID riid, _Out_ LPVOID *ppv );
Untuk memanggil fungsi ini menggunakan Panggilan, anda perlu melakukan sesuatu seperti ini:
// TODO set these variables to the appropriate values var rclsid, riid, ppv uintptr ret, _, _ := getClassObject.Call(rclsid, riid, ppv) // ret is the HRESULT value returned by DllGetClassObject, check it for errors
Dalam kes objek XA_Session anda, anda perlu membungkus dalam jenis Go dan kemudian tentukan kaedah pembalut untuk setiap kaedah COM yang anda mahu gunakan. Berikut ialah pembungkus yang dipermudahkan untuk kaedah ConnectServer dan DisconnectServer:
package xasession import "syscall" type XASession struct { // ... } func (obj *XASession) ConnectServer(id int) int { // ... } func (obj *XASession) DisconnectServer() { // ... }
Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah COM daripada Go Menggunakan syscall.LazyProc?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?

Bagaimana saya menulis objek dan stub untuk ujian di GO?

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?

Bagaimana cara menulis fail dalam bahasa Go dengan mudah?

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?

Bagaimanakah saya menulis tanda aras yang mencerminkan prestasi dunia secara tepat di GO?
