DispInvoke, fonction (oleauto.h)

Appelle automatiquement les fonctions membres sur une interface, en fonction des informations de type pour l’interface. Vous pouvez décrire une interface avec des informations de type et implémenter Invoke pour l’interface à l’aide de cet appel unique.

Syntaxe

HRESULT DispInvoke(
  void       *_this,
  ITypeInfo  *ptinfo,
  DISPID     dispidMember,
  WORD       wFlags,
  DISPPARAMS *pparams,
  VARIANT    *pvarResult,
  EXCEPINFO  *pexcepinfo,
  UINT       *puArgErr
);

Paramètres

_this

Implémentation de l’interface IDispatch décrite par ptinfo.

ptinfo

Informations de type qui décrivent l’interface.

dispidMember

Membre à appeler. Utilisez GetIDsOfNames ou la documentation de l’objet pour obtenir le DISPID.

wFlags

Indicateurs décrivant le contexte de l’appel Invoke .

Valeur Signification
DISPATCH_METHOD
Le membre est appelé en tant que méthode. Si une propriété porte le même nom, cet indicateur et l’indicateur DISPATCH_PROPERTYGET peuvent être définis.
DISPATCH_PROPERTYGET
Le membre est récupéré en tant que membre de propriété ou de données.
DISPATCH_PROPERTYPUT
Le membre est modifié en tant que membre de propriété ou de données.
DISPATCH_PROPERTYPUTREF
Le membre est modifié par une affectation de référence, plutôt que par une affectation de valeur. Cet indicateur est valide uniquement lorsque la propriété accepte une référence à un objet .

pparams

Pointeur vers une structure contenant un tableau d’arguments, un tableau de DISPID d’arguments pour les arguments nommés et le nombre d’éléments dans les tableaux.

pvarResult

Pointeur vers l’emplacement où le résultat doit être stocké, ou Null si l’appelant n’attend aucun résultat. Cet argument est ignoré si DISPATCH_PROPERTYPUT ou DISPATCH_PROPERTYPUTREF est spécifié.

pexcepinfo

Pointeur vers une structure contenant des informations d’exception. Cette structure doit être remplie si DISP_E_EXCEPTION est retourné.

puArgErr

Index dans rgvarg du premier argument qui a une erreur. Les arguments étant stockés dans pdispparams-rgvarg> dans l’ordre inverse, le premier argument est celui qui a l’index le plus élevé dans le tableau. Ce paramètre est retourné uniquement lorsque la valeur de retour résultante est DISP_E_TYPEMISMATCH ou DISP_E_PARAMNOTFOUND.

Valeur retournée

Code de retour Description
S_OK
Réussite.
DISP_E_BADPARAMCOUNT
Le nombre d’éléments fournis à DISPPARAMS est différent du nombre d’arguments acceptés par la méthode ou la propriété .
DISP_E_BADVARTYPE
L’un des arguments dans DISPPARAMS n’est pas un type de variante valide.
DISP_E_EXCEPTION
L’application doit lever une exception. Dans ce cas, la structure passée dans pexcepinfo doit être renseignée.
DISP_E_MEMBERNOTFOUND
Le membre demandé n’existe pas.
DISP_E_NONAMEDARGS
Cette implémentation d’IDispatch ne prend pas en charge les arguments nommés.
DISP_E_OVERFLOW
L’un des arguments dans DISPPARAMS n’a pas pu être forcené au type spécifié.
DISP_E_PARAMNOTFOUND
L’un des ID de paramètre ne correspond pas à un paramètre sur la méthode . Dans ce cas, puArgErr est défini sur le premier argument qui contient l’erreur.
DISP_E_PARAMNOTOPTIONAL
Un paramètre obligatoire a été omis.
DISP_E_TYPEMISMATCH
Impossible de contraindre un ou plusieurs des arguments. L’index du premier paramètre avec le type incorrect dans rgvarg est retourné dans puArgErr.
E_INVALIDARG
L’un des paramètres n’est pas valide.
E_OUTOFMEMORY
Mémoire insuffisante pour terminer l’opération.
 

Toutes les erreurs ITypeInfo ::Invoke peuvent également être retournées.

Remarques

Le paramètre _this est un pointeur vers une implémentation de l’interface sur laquelle est différée. DispInvoke génère une trame de pile, force les paramètres à l’aide de règles de forçage standard, les envoie sur la pile, puis appelle la fonction membre correcte dans le VTBL.

Exemples

Le code suivant de l’exemple de fichier Lines Lines.cpp implémente Invoke à l’aide de DispInvoke. Cette implémentation s’appuie sur DispInvoke pour valider les arguments d’entrée. Pour réduire les risques de sécurité, incluez du code qui effectue une validation plus robuste des arguments d’entrée.

STDMETHODIMP
CLines::Invoke(
   DISPID dispidMember,
   REFIID riid,
   LCID lcid,
   WORD wFlags,
   DISPPARAMS * pdispparams,
   VARIANT * pvarResult,
   EXCEPINFO* pexcepinfo,
   UINT * puArgErr)
{
   return DispInvoke(
   this, m_ptinfo,
   dispidMember, wFlags, pdispparams,
   pvarResult, pexcepinfo, puArgErr); 
}

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête oleauto.h
Bibliothèque OleAut32.lib
DLL OleAut32.dll

Voir aussi

CreateStdDispatch

Création de fonctions d’API Dispatch

IDispatch

IDispatch::Invoke

ITypeInfo ::Invoke