Compartilhar via


DispGetParam

Windows Mobile SupportedWindows Embedded CE Supported

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

  • 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

See Also

Reference

Automation Functions