DispGetParam

Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]

Einen Parameter aus die DISPPARAMS-Struktur, Überprüfen von benannten Parametern und positionelle Parameter abgerufen und erzwingt den für den Parameter den angegebenen Typ.

HRESULT DispGetParam( 
  DISPPARAMS FAR*  pdispparams,  
  unsigned int  position,    
  VARTYPE  vtTarg,           
  VARIANT FAR*  pvarResult,  
  unsigned int FAR*  puArgErr  
);

Parameter

  • pDispParams
    Zeiger auf die Parameter an die IDispatch:: Invoke übergeben.

  • Position
    Die Position des Parameters in der Parameterliste. DispGetParam beginnt, an das Ende des Arrays, wenn pOsition 0 ist, der letzte Parameter in dem Array zurückgegeben wird.

  • vtTarg
    Der Typ des Arguments sollte in umgewandelt werden.

  • pvarResult
    Zeiger auf die Variante den Parameter in übergeben.

  • puArgErr
    Auf return, Zeiger auf den Index des Arguments, das einen DISP_E_TYPEMISMATCH Fehler verursacht hat. Dieser Zeiger wird zurückgegeben, in Invoke um die Position des Arguments in DISPPARAMS anzugeben, die den Fehler verursachte.

Rückgabewert

Der Rückgabewert vom HRESULT ist eine der folgenden:

Rückgabewert

Bedeutung

S_OK

Erfolg.

DISP_E_BADVARTYPE

Variantentyp VtTarg wird nicht unterstützt.

DISP_E_OVERFLOW

Der abgerufene Parameter konnte nicht in den angegebenen Typ umgewandelt werden.

DISP_E_PARAMNOTFOUND

Der Parameter, angegeben durch Position konnte nicht gefunden werden.

DISP_E_TYPEMISMATCH

Das Argument konnte nicht in den angegebenen Typ umgewandelt werden.

E_INVALIDARG

Eines der Argumente war ungültig.

E_OUTOFMEMORY

Nicht genügend Arbeitsspeicher zum Vorgang.

Kommentare

Ausgabe Parameter PvarResult muss eine gültige Variante. Alle vorhandenen Inhalte werden in das Standardverfahren freigegeben. Der Inhalt der Variante werden mit VariantFree freigegeben.

Wenn Sie rechts neben einer Eigenschaft ablegen-Operation zu DispGetParam verwendet haben, sollte der zweite Parameter DISPID_PROPERTYPUT sein. Beispiel:

                      DispGetParam(&dispparams, DISPID_PROPERTYPUT, VT_BOOL, &varResult, &uiArg)

Benannte Parameter können nicht positionsbezogen und umgekehrt zugegriffen werden.

Beispiel

Im folgende Beispiel wird DispGetParamX und Y Eigenschaften festlegen:

STDMETHODIMP
CPoint::Invoke(
   DISPID dispidMember,
   REFIID riid,
   LCID lcid,
   unsigned short wFlags,
   DISPPARAMS FAR* pdispparams,
   VARIANT FAR* pvarResult,
   EXCEPINFO FAR* pExcepInfo,
   unsigned int FAR* puArgErr)
{
   unsigned int uArgErr;
   HRESULT hresult;
   VARIANTARG varg0;
   VARIANT varResultDummy;

   // Make sure the wFlags are valid.
   if(wFlags & ~(DISPATCH_METHOD | DISPATCH_PROPERTYGET |
      DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF))
      return E_INVALIDARG;

   // This object only exposes a "default" interface.
   if(!IsEqualIID(riid, IID_NULL))
      return DISP_E_UNKNOWNINTERFACE;

   // It simplifies the following code if the caller
   // ignores the return value.
   if(puArgErr == NULL)
      puArgErr = &uArgErr;
   if(pvarResult == NULL)
      pvarResult = &varResultDummy;

   VariantInit(&varg0);

   // Assume the return type is void, unless otherwise is found.
   VariantInit(pvarResult);

   switch(dispidMember){
   case IDMEMBER_CPOINT_GETX:
      V_VT(pvarResult) = VT_I2;
      V_I2(pvarResult) = GetX();
      break;

   case IDMEMBER_CPOINT_SETX:
      hresult = DispGetParam(pdispparams, 0, VT_I2, &varg0, puArgErr);
      if(hresult != NOERROR)
         return hresult;
      SetX(V_I2(&varg0));
      break;

   case IDMEMBER_CPOINT_GETY:
      V_VT(pvarResult) = VT_I2;
      V_I2(pvarResult) = GetY();
      break;

   case IDMEMBER_CPOINT_SETY:
      hresult = DispGetParam(pdispparams, 0, VT_I2, &varg0, puArgErr);
      if(hresult != NOERROR)
         return hresult;
      SetY(V_I2(&varg0));
      break;

   default:
      return DISP_E_MEMBERNOTFOUND;
   }
   return NOERROR;
}

Siehe auch

Referenz

CreateStdDispatch

IDispatch:: Invoke

Konzepte

Erstellen von Dispatch API-Funktionen

IDispatch-Schnittstelle