DispGetParam-Funktion (oleauto.h)
Ruft einen Parameter aus der DISPPARAMS-Struktur ab, überprüft sowohl benannte Parameter als auch Positionsparameter und wandelt den Parameter in den angegebenen Typ um.
Syntax
HRESULT DispGetParam(
[in] DISPPARAMS *pdispparams,
UINT position,
VARTYPE vtTarg,
[out] VARIANT *pvarResult,
[out, optional] UINT *puArgErr
);
Parameter
[in] pdispparams
Die an Invoke übergebenen Parameter.
position
Die Position des Parameters in der Parameterliste. DispGetParam beginnt am Ende des Arrays. Wenn position also 0 ist, wird der letzte Parameter im Array zurückgegeben.
vtTarg
Der Typ, in den das Argument zwangsgefränkt werden soll.
[out] pvarResult
die Variante, an die der Parameter übergeben werden soll.
[out, optional] puArgErr
Bei der Rückgabe der Index des Arguments, das einen DISP_E_TYPEMISMATCH Fehler verursacht hat. Dieser Zeiger wird an Invoke zurückgegeben, um die Position des Arguments in DISPPARAMS anzugeben, das den Fehler verursacht hat.
Rückgabewert
Diese Funktion kann einen dieser Werte zurückgeben.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Erfolg. |
|
Der Variantentyp vtTarg wird nicht unterstützt. |
|
Der abgerufene Parameter konnte nicht in den angegebenen Typ umgewandelt werden. |
|
Der durch position angegebene Parameter konnte nicht gefunden werden. |
|
Das Argument konnte nicht in den angegebenen Typ umgewandelt werden. |
|
Einer der Parameter ist ungültig. |
|
Unzureichender Arbeitsspeicher, um den Vorgang abzuschließen. |
Hinweise
Der Ausgabeparameter pvarResult muss eine gültige Variante sein. Alle vorhandenen Inhalte werden standardmäßig freigegeben. Die Inhalte der Variante werden mit VariantFree freigegeben.
Wenn Sie DispGetParam verwendet haben, um die rechte Seite eines Property Put-Vorgangs abzurufen, sollte der zweite Parameter DISPID_PROPERTYPUT sein. Beispiel:
DispGetParam(&dispparams, DISPID_PROPERTYPUT, VT_BOOL, &varResult, &uiArg)
Auf benannte Parameter kann nicht positioniert zugegriffen werden und umgekehrt.
Beispiele
Im folgenden Beispiel wird DispGetParam verwendet, um die Eigenschaften X und Y festzulegen.
STDMETHODIMP
CPoint::Invoke(
DISPID dispidMember,
REFIID riid,
LCID lcid,
unsigned short wFlags,
DISPPARAMS * pdispparams,
VARIANT * pvarResult,
EXCEPINFO * pExcepInfo,
unsigned int * 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;
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | oleauto.h |
Bibliothek | OleAut32.lib |
DLL | OleAut32.dll |