IDispatch:: Invoke
Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]
Ermöglicht den Zugriff auf Eigenschaften und Methoden von einem Objekt verfügbar gemacht werden. Dispatch-Funktion DispInvoke stellt eine Standardimplementierung von IDispatch:: Invoke bereit.
HRESULT Invoke(
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pDispParams,
VARIANT FAR* pVarResult,
EXCEPINFO FAR* pExcepInfo,
unsigned int FAR* puArgErr
);
Parameter
dispIdMember
Das Element identifiziert. Verwenden Sie IDispatch:: GetIDsOfNames oder der Dokumentation des Objekts, um die Dispatch-ID zu erhalten.riid
Für die zukünftige Verwendung reserviert. IID_NULL muss sein.LCID
Der Gebietsschemakontext, in dem Argumente interpretiert werden soll. Lcid -Funktion GetIDsOfNames wird verwendet und ist auch an IDispatch:: Invoke damit das Objekt, seine Argumente, die spezifisch für ein Gebietsschema interpretieren übergeben.Anwendungen, die nicht mit mehreren nationale Sprachen unterstützen können dieser Parameter ignoriert. Weitere Informationen finden Sie in unterstützen mehrere National Sprachen und verfügbar ActiveX Objects.
wFlags
Flags, beschreiben den Kontext des Aufruf aufrufen, enthalten:Wert
Beschreibung
DISPATCH_METHOD
Der Member wird als eine Methode aufgerufen. Wenn eine Eigenschaft den gleichen Namen verfügt, kann sowohl 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.
pDispParams
Zeiger auf eine DISPPARAMS-Struktur für ,, enthält ein Array von Argumenten, die ein Array von Argument-DISPIDs für benannte Argumente sowie Zähler für die Anzahl der Elemente in den Arrays.pVarResult
Zeiger auf den Speicherort, in dem das Ergebnis gespeicherten oder NULL, wenn der Aufrufer kein Ergebnis erwartet sein. Dieses Argument wird ignoriert, wenn DISPATCH_PROPERTYPUT oder DISPATCH_PROPERTYPUTREF angegeben ist.pExcepInfo
Ein Zeiger auf eine Struktur, die Informationen zur Ausnahme enthält. Dieser Struktur muss ausgefüllt werden, wenn DISP_E_EXCEPTION ist. NULL kann sein.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. Dieses Argument kann festgelegt werden auf Null. Einzelheiten finden Sie unter "Fehler zurückgeben"Im folgenden Abschnitt für Kommentare.
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 zur DISPPARAMS unterscheidet sich von der Anzahl der von die Methode oder Eigenschaft akzeptiert Argumente. |
DISP_E_BADVARTYPE |
Eines der Argumente im Rgvarg 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, oder der Aufruf zu Invoke hat versucht, den Wert einer schreibgeschützten Eigenschaft festzulegen. |
DISP_E_NONAMEDARGS |
Diese Implementierung von IDispatch unterstützt keine benannten Argumente. |
DISP_E_OVERFLOW |
Eines der Argumente im Rgvarg konnte nicht in den angegebenen Typ umgewandelt werden. |
DISP_E_PARAMNOTFOUND |
Einer der Parameter DISPIDs entspricht nicht auf einen Parameter der Methode. PuArgErr sollte in diesem Fall auf das erste Argument festgelegt werden, die den Fehler enthält. Sie erhalten den Fehler DISP_E_PARAMNOTFOUND, wenn Sie versuchen, eine Eigenschaft festlegen und Sie haben nicht die cNamedArgs und RgdispidNamedArgs Elemente der DISPPARAMS-Struktur initialisiert. |
DISP_E_TYPEMISMATCH |
Mindestens eines der Argumente konnte nicht umgewandelt werden. Der Index in Rgvarg des ersten Parameters mit dem falschen Typ ist im Parameter PuArgErr zurückgegeben. |
DISP_E_UNKNOWNINTERFACE |
Die Schnittstelle-ID Riid übergebene ist nicht IID_NULL. |
DISP_E_UNKNOWNLCID |
Der aufgerufene Member interpretiert Zeichenfolgenargumente entsprechend auf die LCID und die LCID wird nicht erkannt. Wenn die LCID zum Interpretieren von Argumenten nicht erforderlich ist, sollte dieser Fehler nicht zurückgegeben. |
DISP_E_PARAMNOTOPTIONAL |
Ein erforderlicher Parameter wurde ausgelassen. |
Kommentare
Im Allgemeinen sollten Sie nicht Invoke direkt implementieren. Verwenden Sie stattdessen die Dispatchschnittstelle, um Funktionen CreateStdDispatch und DispInvoke erstellen. Einzelheiten hierzu finden Sie in CreateStdDispatchDispInvoke, erstellen die IDispatch-Schnittstelle und verfügbar ActiveX Objects https://msdn.microsoft.com/de-de/library/ms221669(v=vs.100).
Wenn einige anwendungsspezifische Verarbeitung vor dem Aufruf eines Members ausgeführt werden muss, sollte der Code die erforderlichen Aktionen ausführen und rufen dann ITypeInfo:: Invoke, den Member aufzurufen. ITypeInfo:: Invoke fungiert wie genau IDispatch:: Invoke. Die Standardimplementierungen von IDispatch:: InvokeCreateStdDispatch erstellt, und DispInvoke verzögern um ITypeInfo:: Invoke.
In einem ActiveX-Client sollte IDispatch:: Invoke erhalten und die Werte der Eigenschaften festlegen oder Aufrufen einer Methode von ActiveX-Objekt verwendet werden. Arguments DispIdMember identifiziert aufzurufenden Members. Die DISPIDs, die Mitglieder identifizieren werden von der Implementierung des Objekts definiert und können durch Dokumentation des Objekts, mit der Funktion IDispatch:: GetIDsOfNames oder -ITypeInfo-Schnittstelle bestimmt werden.
Wenn Sie mit DISPATCH_PROPERTYPUT oder DISPATCH_PROPERTYPUTREF IDispatch::Invoke() verwenden, müssen Sie die cNamedArgs und RgdispidNamedArgs Elemente die DISPPARAMS-Struktur mit den folgenden speziell zu initialisieren:
DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;
Die Informationen, die Entwickler von ActiveX-Clients und andere Adressen, die Code verwenden folgt, um ActiveX-Objekte offen legen. Es wird das Verhalten, das erwarten Benutzer von verfügbar gemachten Objekte beschrieben.