Sie möchten eine Windows-DLL-Datei in Ihrem Go-Programm verwenden, es tritt jedoch ein Fehler auf Aufrufen einer COM-Methode.
Wenn Sie COM-Methoden von Go aus mit einem syscall.LazyProc aufrufen, müssen Sie die vom LazyProc-Objekt bereitgestellte Call-Funktion verwenden. Die Call-Funktion erwartet, dass alle Parameter als uintptrs übergeben werden.
Nehmen wir zum Beispiel die DllGetClassObject-Funktion aus dem Direct3D9 Go-Wrapper-Beispiel, das im referenzierten Thread erwähnt wird. Seine Signatur lautet:
HRESULT __stdcall DllGetClassObject( _In_ REFCLSID rclsid, _In_ REFIID riid, _Out_ LPVOID *ppv );
Um diese Funktion mit Call aufzurufen, müssen Sie etwa Folgendes tun:
// 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
Im Fall Ihres XA_Session-Objekts müssen Sie umbrechen Erstellen Sie es in einem Go-Typ und definieren Sie dann Wrapper-Methoden für jede COM-Methode, die Sie verwenden möchten. Hier ist ein vereinfachter Wrapper für die Methoden ConnectServer und DisconnectServer:
package xasession import "syscall" type XASession struct { // ... } func (obj *XASession) ConnectServer(id int) int { // ... } func (obj *XASession) DisconnectServer() { // ... }
Das obige ist der detaillierte Inhalt vonWie rufe ich COM-Methoden von Go aus mit syscall.LazyProc auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!