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