Vous souhaitez utiliser un fichier DLL Windows dans votre programme Go, mais vous rencontrez une erreur lorsque appeler une méthode COM.
Lors de l'appel de méthodes COM depuis Go à l'aide d'un syscall.LazyProc, vous devez utiliser la fonction Call fournie par l'objet LazyProc. La fonction Call s'attend à ce que tous les paramètres soient transmis sous la forme uintptrs.
Par exemple, prenons la fonction DllGetClassObject de l'exemple de wrapper Direct3D9 Go mentionné dans le fil de discussion référencé. Sa signature est :
HRESULT __stdcall DllGetClassObject( _In_ REFCLSID rclsid, _In_ REFIID riid, _Out_ LPVOID *ppv );
Pour appeler cette fonction à l'aide de Call, vous devrez faire quelque chose comme ceci :
// 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
Dans le cas de votre objet XA_Session, vous devez envelopper dans un type Go, puis définissez des méthodes wrapper pour chaque méthode COM que vous souhaitez utiliser. Voici un wrapper simplifié pour les méthodes ConnectServer et DisconnectServer :
package xasession import "syscall" type XASession struct { // ... } func (obj *XASession) ConnectServer(id int) int { // ... } func (obj *XASession) DisconnectServer() { // ... }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!