Microsoft Windows CE 3.0  

DispGetParam

Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.

This function retrieves a parameter from the DISPPARAMSstructure, checks both named parameters and positional parameters, and coerces the parameter to the specified type.

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

Parameters

pdispparams
Pointer to the parameters passed to IDispatch::Invoke.
position
Position of the parameter in the parameter list. DispGetParamstarts at the end of the array, so if p ositionis 0, the last parameter in the array is returned.
vtTarg
Type the argument should be coerced to.
pvarResult
Pointer to the variant to pass the parameter into.
puArgErr
On return, pointer to the index of the argument that caused a DISP_E_TYPEMISMATCH error. This pointer is returned to Invoketo indicate the position of the argument in DISPPARAMS that caused the error.

Return Values

One of the values obtained from the returned HRESULTand described in the following table is returned.

Value Description
S_OK Success.
DISP_E_BADVARTYPE The variant type vtTargis not supported.
DISP_E_OVERFLOW The retrieved parameter could not be coerced to the specified type.
DISP_E_PARAMNOTFOUND The parameter indicated by positioncould not be found.
DISP_E_TYPEMISMATCH The argument could not be coerced to the specified type.
E_INVALIDARG One of the arguments was invalid.
E_OUTOFMEMORY Insufficient memory to complete operation.

Remarks

The output parameter pvarResultmust be a valid variant. Any existing contents are released in the standard way. The contents of the variant are freed with VariantFree.

Passing into this function any invalid and, under some circumstances, NULL pointers will result in unexpected termination of the application.

If you have used DispGetParamto get the right side of a property put operation, the second parameter should be DISPID_PROPERTYPUT. For example:

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

Named parameters cannot be accessed positionally, and vice versa.

Example

The following code example uses DispGetParamto set Xand Yproperties:

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; UNUSED(lcid);
UNUSED(pExcepInfo); // Make sure the wFlags are valid. if(wFlags
& ~(DISPATCH_METHOD | DISPATCH_PROPERTYGET |
DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF)) return
ResultFromScode(E_INVALIDARG); // This object only exposes a
"default" interface. if(!IsEqualIID(riid, IID_NULL)) return
ResultFromScode(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
ResultFromScode(DISP_E_MEMBERNOTFOUND); } return NOERROR; }

Requirements

Runs on Versions Defined in Include Link to
Windows CE OS 2.0 and later Oleauto.h    
Note   This API is part of the complete Windows CE OS package as provided by Microsoft. The functionality of a particular platform is determined by the original equipment manufacturer (OEM) and some devices may not support this API.