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

Siehe auch

Referenz

CreateStdDispatch

ITypeInfo:: Invoke

IDispatch:: Invoke

Konzepte

Erstellen von Dispatch API-Funktionen

IDispatch-Schnittstelle