DispGetParam
9/8/2008
Essa função faz o seguinte:
- Recupera um parâmetro a partir de DISPPARAMS estrutura.
- Verificações nomeado parâmetros e os parâmetros posicionais.
- Converte no parâmetro para o tipo especificado.
Syntax
HRESULT DispGetParam(
DISPPARAMS FAR* pdispparams,
unsigned int position,
VARTYPE vtTarg,
VARIANT FAR* pvarResult,
unsigned int FAR* puArgErr
);
Parameters
- pdispparams
[no] Ponteiro para os parâmetros passados para IDispatch::Invoke.
posição
[no] Posição do parâmetro na lista de parâmetro.DispGetParam começa na extremidade de matriz, caso se o position é 0, o último parâmetro na matriz é retornado.
- vtTarg
[no] Tipo de argumento deve ser forçado para.
- pvarResult
[out] Ponteiro para a variante para transmitir o parâmetro em.
- puArgErr
[out] Em retorno, ponteiro para o índice do argumento que causou um erro DISP_E_TYPEMISMATCH. Esse ponteiro é retornado para Chamar Para indicar a posição do argumento na DISPPARAMS que causou o erro.
Return Value
Retorna os valores HRESULT mostrados a seguinte tabela.
Valor | Descrição |
---|---|
S_OK |
O sucesso. |
DISP_E_BADVARTYPE |
A variante tipo vtTarg não é com suporte. |
DISP_E_OVERFLOW |
O parâmetro recuperado não pôde ser forçado para o tipo especificado. |
DISP_E_PARAMNOTFOUND |
O parâmetro indicado por posição Não foi encontrado. |
DISP_E_TYPEMISMATCH |
O argumento não pôde ser forçado para o tipo especificado. |
E_INVALIDARG |
Um argumento é inválido. |
E_OUTOFMEMORY |
Memória insuficiente para completo operação. |
Remarks
O parâmetro de saída pvarResult Deve ser um válido variante. O conteúdo existente é lançado no padrão maneira. O conteúdo de variante é liberado com VariantFree.
Passagem inválido (e, em algumas circunstâncias NULL) ponteiros para essa função faz com que uma terminação inesperada do aplicativo.
Se você usar DispGetParam Para o direito get laterais de pôr uma propriedade operação, o segundo parâmetro deve ser DISPID_PROPERTYPUT. Por exemplo:
DispGetParam(&dispparams, DISPID_PROPERTYPUT, VT_BOOL, &varResult)
Os parâmetros nomeados não podem ser acessados positionally e vice-versa.
Example
O seguinte usa exemplo de código DispGetParam Para definir X
e Y
Propriedades.
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
Header | oleauto.h |
Library | oleaut32.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |