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 .
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 |
---|---|
|
Réussite. |
|
Le nombre d’éléments fournis à DISPPARAMS est différent du nombre d’arguments acceptés par la méthode ou la propriété . |
|
L’un des arguments dans DISPPARAMS n’est pas un type de variante valide. |
|
L’application doit lever une exception. Dans ce cas, la structure passée dans pexcepinfo doit être renseignée. |
|
Le membre demandé n’existe pas. |
|
Cette implémentation d’IDispatch ne prend pas en charge les arguments nommés. |
|
L’un des arguments dans DISPPARAMS n’a pas pu être forcené au type spécifié. |
|
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. |
|
Un paramètre obligatoire a été omis. |
|
Impossible de contraindre un ou plusieurs des arguments. L’index du premier paramètre avec le type incorrect dans rgvarg est retourné dans puArgErr. |
|
L’un des paramètres n’est pas valide. |
|
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 |