DispInvoke
Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]
Automatisch ruft Memberfunktionen auf einer Schnittstelle, die Typinformationen für die Schnittstelle angegeben. Können Sie eine Schnittstelle mit Typinformationen beschreiben und implementieren IDispatch:: Invoke für die Schnittstelle mit dieser einzelnen Aufruf.
HRESULT DispInvoke(
void FAR* _this,
ITypeInfo FAR* ptinfo,
DISPID dispidMember,
unsigned short wFlags,
DISPPARAMS FAR* pparams,
VARIANT FAR* pvarResult,
EXCEPINFO pexcepinfo,
unsigned int FAR* puArgErr
);
Parameter
_this
Zeiger auf eine Implementierung der die Schnittstelle IDispatchPtinfo beschrieben.ptinfo
Zeiger auf die Typinformationen, die die Schnittstelle beschreibt.dispidMember
Bezeichnet den Member aufgerufen werden. Verwenden Sie GetIDsOfNames oder Dokumentation des Objekts, um die DISPID zu erhalten.wFlags
Flags, die den Kontext der Invoke beschreiben rufen, wie folgt:Wert
Beschreibung
DISPATCH_METHOD
Der Member wird als eine Methode aufgerufen. Wenn eine Eigenschaft den gleichen Namen verfügt, kann dies und DISPATCH_PROPERTYGET-Flag festgelegt werden.
DISPATCH_PROPERTYGET
Der Member wird als eine Eigenschaft oder als Datenmember abgerufen.
DISPATCH_PROPERTYPUT
Der Member wird als eine Eigenschaft oder als Datenmember geändert.
DISPATCH_PROPERTYPUTREF
Das Element wird durch einen Wert zuweisen, anstatt eine Verweis-Zuordnung geändert. Dieses Flag ist gültig, nur wenn die Eigenschaft einen Verweis auf ein Objekt akzeptiert.
pparams
Ein Zeiger auf eine Struktur, die ein Array von Argumenten, die ein Array von Argument-DISPIDs für benannte Argumente sowie Zähler für Anzahl der Elemente in den Arrays enthält.pvarResult
Zeiger auf, wobei das Ergebnis ist gespeichert oder NULL, wenn der Aufrufer kein Ergebnis erwartet. Dieses Argument wird ignoriert, wenn DISPATCH_PROPERTYPUT oder DISPATCH_PROPERTYPUTREF angegeben ist.pexcepinfo
Ein Zeiger auf eine Struktur mit Ausnahmeinformationen. Dieser Struktur muss ausgefüllt werden, wenn DISP_E_EXCEPTION ist.puArgErr
Der Index in das erste Argument, das ein Fehler Rgvarg. Argumente werden in Pdispparams-gespeichert > Rgvarg in umgekehrter Reihenfolge, sodass das erste Argument mit dem höchsten Index im Array ist. Dieser Parameter ist nur bei der resultierende Rückgabewert DISP_E_TYPEMISMATCH oder DISP_E_PARAMNOTFOUND zurückgegeben.
Rückgabewert
Der Rückgabewert vom zurückgegebenen HRESULT ist eine der folgenden:
Rückgabewert |
Bedeutung |
---|---|
S_OK |
Erfolg. |
DISP_E_BADPARAMCOUNT |
Die Anzahl der Elemente in DISPPARAMS bereitgestellten unterscheidet sich von der Anzahl der von die Methode oder Eigenschaft akzeptiert Argumente. |
DISP_E_BADVARTYPE |
Eines der Argumente in DISPPARAMS ist kein gültiger variant Typ. |
DISP_E_EXCEPTION |
Die Anwendung muss eine Ausnahme ausgelöst. In diesem Fall sollte die Struktur übergebenen Pexcepinfo 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 in den angegebenen Typ umgewandelt werden. |
DISP_E_PARAMNOTFOUND |
Einer der Parameter-IDs entspricht nicht auf einen Parameter der Methode. PuArgErr ist in diesem Fall auf das erste Argument festgelegt, die den Fehler enthält. |
DISP_E_PARAMNOTOPTIONAL |
Ein erforderlicher Parameter wurde ausgelassen. |
DISP_E_TYPEMISMATCH |
Mindestens eines der Argumente konnte nicht umgewandelt werden. Der Index des ersten Parameters mit dem falschen Typ in Rgvarg wird PuArgErr zurückgegeben. |
E_INVALIDARG |
Eines der Argumente ist ungültig. |
E_OUTOFMEMORY |
Unzureichender Arbeitsspeicher oder nicht genügend Speicherplatz. |
Andere Rückgabecodes |
ITypeInfo:: Invoke Fehler können auch zurückgegeben werden. |
Kommentare
Der Parameter _this ist ein Zeiger auf eine Implementierung der Schnittstelle, die zu zurückgestellt wird ist. DispInvoke erstellt einen Stapelrahmen, wandelt Parameter mithilfe von standardmäßigen Umwandlung Regeln, legt diese auf dem Stapel ab und ruft dann die richtige Memberfunktion in der VTBL.
Beispiel
Der folgende Code aus der Zeilen-Beispieldatei Lines.cpp implementiert IDispatch:: InvokeDispInvoke verwenden. Diese Implementierung beruht auf DispInvoke Eingabeargumente überprüfen. Fügen Sie Code, die eine stabilere Validierung von den Eingabeargumenten durchführt, um Sicherheitsrisiken zu minimieren.
STDMETHODIMP
CLines::Invoke(
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pdispparams,
VARIANT FAR* pvarResult,
EXCEPINFO FAR* pexcepinfo,
UINT FAR* puArgErr)
{
return DispInvoke(
this, m_ptinfo,
dispidMember, wFlags, pdispparams,
pvarResult, pexcepinfo, puArgErr);
}