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.
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 |
---|---|
|
Erfolg. |
|
Die Anzahl der für DISPPARAMS bereitgestellten Elemente unterscheidet sich von der Anzahl der Argumente, die von der Methode oder Eigenschaft akzeptiert werden. |
|
Eines der Argumente in DISPPARAMS ist kein gültiger Variantentyp. |
|
Die Anwendung muss eine Ausnahme auslösen. In diesem Fall sollte die in pexcepinfo übergebene Struktur ausgefüllt werden. |
|
Der angeforderte Member ist nicht vorhanden. |
|
Diese Implementierung von IDispatch unterstützt keine benannten Argumente. |
|
Eines der Argumente in DISPPARAMS konnte nicht an den angegebenen Typ geerct werden. |
|
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. |
|
Ein erforderlicher Parameter wurde weggelassen. |
|
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. |
|
Einer der Parameter ist ungültig. |
|
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 |