DispInvoke-Funktion (oleauto.h)

Ruft automatisch Memberfunktionen auf einer Schnittstelle auf, wenn die Typinformationen für die Schnittstelle angegeben sind. Sie können eine Schnittstelle mit Typinformationen beschreiben und Invoke für die Schnittstelle mithilfe dieses einzelnen Aufrufs implementieren.

Syntax

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

Parameter

_this

Eine Implementierung der IDispatch-Schnittstelle , die von ptinfo beschrieben wird.

ptinfo

Die Typinformationen, die die Schnittstelle beschreiben.

dispidMember

Das element, das aufgerufen werden soll. Verwenden Sie GetIDsOfNames oder die Dokumentation des Objekts, um die DISPID abzurufen.

wFlags

Flags, die den Kontext des Aufrufs "Aufrufen" beschreiben.

Wert Bedeutung
DISPATCH_METHOD
Das Element wird als Methode aufgerufen. Wenn eine Eigenschaft denselben Namen hat, können sowohl dieses als auch das DISPATCH_PROPERTYGET-Flag festgelegt werden.
DISPATCH_PROPERTYGET
Das Element wird als Eigenschaft oder Datenmember abgerufen.
DISPATCH_PROPERTYPUT
Das Element wird als Eigenschaft oder Datenmember geändert.
DISPATCH_PROPERTYPUTREF
Das Element wird durch eine Verweiszuweisung und nicht durch eine Wertzuweisung geändert. Dieses Flag ist nur gültig, wenn die Eigenschaft einen Verweis auf ein Objekt akzeptiert.

pparams

Zeiger auf eine Struktur, die ein Array von Argumenten, ein Array von Argument DISPIDs für benannte Argumente und die Anzahl der Elemente in den Arrays enthält.

pvarResult

Zeiger auf den Speicherort des Ergebnisses oder NULL, wenn der Aufrufer kein Ergebnis erwartet. Dieses Argument wird ignoriert, wenn DISPATCH_PROPERTYPUT oder DISPATCH_PROPERTYPUTREF angegeben wird.

pexcepinfo

Zeiger auf eine Struktur, die Ausnahmeinformationen enthält. Diese Struktur sollte ausgefüllt werden, wenn DISP_E_EXCEPTION zurückgegeben wird.

puArgErr

Der Index innerhalb von rgvarg des ersten Arguments, das einen Fehler aufweist. Argumente werden in pdispparams-rgvarg> in umgekehrter Reihenfolge gespeichert, sodass das erste Argument das Argument mit dem höchsten Index im Array ist. Dieser Parameter wird nur zurückgegeben, wenn der resultierende Rückgabewert DISP_E_TYPEMISMATCH oder DISP_E_PARAMNOTFOUND ist.

Rückgabewert

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
DISP_E_BADPARAMCOUNT
Die Anzahl der für DISPPARAMS bereitgestellten Elemente unterscheidet sich von der Anzahl der Argumente, die von der Methode oder Eigenschaft akzeptiert werden.
DISP_E_BADVARTYPE
Eines der Argumente in DISPPARAMS ist kein gültiger Variantentyp.
DISP_E_EXCEPTION
Die Anwendung muss eine Ausnahme auslösen. In diesem Fall sollte die in pexcepinfo übergebene Struktur ausgefüllt werden.
DISP_E_MEMBERNOTFOUND
Der angeforderte Member ist nicht vorhanden.
DISP_E_NONAMEDARGS
Diese Implementierung von IDispatch unterstützt keine benannten Argumente.
DISP_E_OVERFLOW
Eines der Argumente in DISPPARAMS konnte nicht an den angegebenen Typ geerct werden.
DISP_E_PARAMNOTFOUND
Eine der Parameter-IDs entspricht nicht einem Parameter für die -Methode. In diesem Fall wird puArgErr auf das erste Argument festgelegt, das den Fehler enthält.
DISP_E_PARAMNOTOPTIONAL
Ein erforderlicher Parameter wurde weggelassen.
DISP_E_TYPEMISMATCH
Mindestens eines der Argumente konnte nicht zwangsweise ausgelöst werden. Der Index des ersten Parameters mit dem falschen Typ in rgvarg wird in puArgErr zurückgegeben.
E_INVALIDARG
Einer der Parameter ist ungültig.
E_OUTOFMEMORY
Unzureichender Arbeitsspeicher, um den Vorgang abzuschließen.
 

Alle ITypeInfo::Invoke-Fehler können auch zurückgegeben werden.

Hinweise

Der Parameter _this ist ein Zeiger auf eine Implementierung der Schnittstelle, auf die zurückgestellt wird. DispInvoke erstellt einen Stapelrahmen, zwangsweise Parameter mithilfe von Standardkoerzregeln, pusht sie auf den Stapel und ruft dann die richtige Memberfunktion in der VTBL auf.

Beispiele

Der folgende Code aus der Zeilenbeispieldatei Lines.cpp implementiert Invoke using DispInvoke. Diese Implementierung basiert auf DispInvoke , um Eingabeargumente zu überprüfen. Um Sicherheitsrisiken zu minimieren, fügen Sie Code ein, der eine robustere Überprüfung der Eingabeargumente durchführt.

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); 
}

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile oleauto.h
Bibliothek OleAut32.lib
DLL OleAut32.dll

Weitere Informationen

CreateStdDispatch

Erstellen von Dispatch-API-Funktionen

IDispatch

IDispatch::Invoke

ITypeInfo::Invoke