Função DispGetParam (oleauto.h)
Recupera um parâmetro da estrutura DISPPARAMS, verificando parâmetros nomeados e parâmetros posicionais e coagi o parâmetro ao tipo especificado.
Sintaxe
HRESULT DispGetParam(
[in] DISPPARAMS *pdispparams,
UINT position,
VARTYPE vtTarg,
[out] VARIANT *pvarResult,
[out, optional] UINT *puArgErr
);
Parâmetros
[in] pdispparams
Os parâmetros passados para Invoke.
position
A posição do parâmetro na lista de parâmetros. DispGetParam começa no final da matriz; portanto, se position for 0, o último parâmetro na matriz será retornado.
vtTarg
O tipo ao qual o argumento deve ser coagido.
[out] pvarResult
a variante para a qual passar o parâmetro.
[out, optional] puArgErr
No retorno, o índice do argumento que causou um erro de DISP_E_TYPEMISMATCH. Esse ponteiro é retornado a Invoke para indicar a posição do argumento em DISPPARAMS que causou o erro.
Retornar valor
Essa função pode retornar um desses valores.
Código de retorno | Descrição |
---|---|
|
Êxito. |
|
Não há suporte para o tipo variante vtTarg . |
|
O parâmetro recuperado não pôde ser coagido ao tipo especificado. |
|
Não foi possível encontrar o parâmetro indicado por posição . |
|
O argumento não pôde ser coagido ao tipo especificado. |
|
Um dos parâmetros não é válido. |
|
Memória insuficiente para concluir a operação. |
Comentários
O parâmetro de saída pvarResult deve ser uma variante válida. Qualquer conteúdo existente é lançado da maneira padrão. O conteúdo da variante é liberado com VariantFree.
Se você tiver usado DispGetParam para obter o lado direito de uma operação de colocação de propriedade, o segundo parâmetro deverá ser DISPID_PROPERTYPUT. Por exemplo:
DispGetParam(&dispparams, DISPID_PROPERTYPUT, VT_BOOL, &varResult, &uiArg)
Parâmetros nomeados não podem ser acessados posicionalmente e vice-versa.
Exemplos
O exemplo a seguir usa DispGetParam para definir propriedades X e Y.
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;
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | oleauto.h |
Biblioteca | OleAut32.lib |
DLL | OleAut32.dll |