Méthode IDispatch ::Invoke (oaidl.h)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet. La fonction de répartition DispInvoke fournit une implémentation standard d’Invoke.

Syntaxe

HRESULT Invoke(
  [in]      DISPID     dispIdMember,
  [in]      REFIID     riid,
  [in]      LCID       lcid,
  [in]      WORD       wFlags,
  [in, out] DISPPARAMS *pDispParams,
  [out]     VARIANT    *pVarResult,
  [out]     EXCEPINFO  *pExcepInfo,
  [out]     UINT       *puArgErr
);

Paramètres

[in] dispIdMember

Identifie le membre. Utilisez GetIDsOfNames ou la documentation de l’objet pour obtenir l’identificateur de répartition.

[in] riid

Réservé à un usage ultérieur. Doit être IID_NULL.

[in] lcid

Contexte des paramètres régionaux dans lequel interpréter les arguments. Le lcid est utilisé par la fonction GetIDsOfNames et est également passé à Invoke pour permettre à l’objet d’interpréter ses arguments spécifiques à un paramètre régional.

Les applications qui ne prennent pas en charge plusieurs langues nationales peuvent ignorer ce paramètre. Pour plus d’informations, consultez Prise en charge de plusieurs langues nationales et exposition d’objets ActiveX.

[in] 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 attribution de référence plutôt que par une attribution de valeur. Cet indicateur est valide uniquement lorsque la propriété accepte une référence à un objet.

[in, out] pDispParams

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

[out] 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é.

[out] pExcepInfo

Pointeur vers une structure qui contient les informations sur les exceptions. Cette structure doit être renseignée si DISP_E_EXCEPTION est retourné. Sa valeur peut être NULL.

[out] 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 avec l’index le plus élevé du tableau. Ce paramètre est retourné uniquement lorsque la valeur de retour obtenue est DISP_E_TYPEMISMATCH ou DISP_E_PARAMNOTFOUND. Cet argument peut être défini sur null. Pour plus d’informations, consultez Renvoi d’erreurs.

Valeur retournée

Cette méthode peut retourner l’une de ces valeurs.

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 de DISPPARAMS n’a pas pu être exécuté sous la force du 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_TYPEMISMATCH
Un ou plusieurs des arguments n’ont pas pu être mis sous la force. L’index du premier paramètre avec le type incorrect dans rgvarg est retourné dans puArgErr.
DISP_E_UNKNOWNINTERFACE

L’identificateur d’interface transmis dans riid n’est pas IID_NULL.
DISP_E_UNKNOWNLCID
Le membre appelé interprète les arguments de chaîne en fonction du LCID, et le LCID n’est pas reconnu. Si le LCID n’est pas nécessaire pour interpréter les arguments, cette erreur ne doit pas être retournée
DISP_E_PARAMNOTOPTIONAL
Un paramètre obligatoire a été omis.

Remarques

En règle générale, vous ne devez pas implémenter Invoke directement. Utilisez plutôt l’interface de répartition pour créer les fonctions CreateStdDispatch et DispInvoke. Pour plus d’informations, consultez CreateStdDispatch, DispInvoke, Creating the IDispatch Interface and Exposing ActiveX Objects.

Si un traitement spécifique à l’application doit être effectué avant d’appeler un membre, le code doit effectuer les actions nécessaires, puis appeler ITypeInfo ::Invoke pour appeler le membre. ITypeInfo ::Invoke agit exactement comme Invoke. Les implémentations standard d’Invoke créées par CreateStdDispatch et DispInvoke sont reportées sur ITypeInfo ::Invoke.

Dans un client ActiveX, Invoke doit être utilisé pour obtenir et définir les valeurs des propriétés, ou pour appeler une méthode d’un objet ActiveX. L’argument dispIdMember identifie le membre à appeler. Les DISPID qui identifient les membres sont définis par l’implémenteur de l’objet et peuvent être déterminés à l’aide de la documentation de l’objet, de la fonction IDispatch ::GetIDsOfNames ou de l’interface ITypeInfo .

Lorsque vous utilisez IDispatch ::Invoke() avec DISPATCH_PROPERTYPUT ou DISPATCH_PROPERTYPUTREF, vous devez initialiser spécialement les éléments cNamedArgs et rgdispidNamedArgs de votre structure DISPPARAMS avec les éléments suivants :

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

Les informations suivantes s’adressent aux développeurs de clients ActiveX et à d’autres utilisateurs qui utilisent du code pour exposer des objets ActiveX. Il décrit le comportement auquel les utilisateurs d’objets exposés doivent s’attendre.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête oaidl.h

Voir aussi

IDispatch