Skip to main content
Komponentenautomatisierung
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  
);
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.

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.

Im Allgemeinen sollten Sie nicht Invoke direkt implementieren. Verwenden Sie stattdessen die Dispatchschnittstelle, um Funktionen CreateStdDispatch und DispInvoke erstellen. Einzelheiten hierzu finden Sie in CreateStdDispatch DispInvoke, erstellen die IDispatch-Schnittstelle und verfügbar ActiveX Objects .

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.