Maison > développement back-end > Golang > le corps du texte

Comment appeler des méthodes COM depuis Go à l'aide de syscall.LazyProc ?

Barbara Streisand
Libérer: 2024-10-31 03:48:01
original
941 Les gens l'ont consulté

How to Call COM Methods from Go Using syscall.LazyProc?

Utilisation de COM dans Go

Problème

Vous souhaitez utiliser un fichier DLL Windows dans votre programme Go, mais vous rencontrez une erreur lorsque appeler une méthode COM.

Solution

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
);
Copier après la connexion

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
Copier après la connexion

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() {
    // ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!