Função DispInvoke (oleauto.h)
Chama automaticamente funções membro em uma interface, considerando as informações de tipo da interface. Você pode descrever uma interface com informações de tipo e implementar Invoke para a interface usando essa única chamada.
Sintaxe
HRESULT DispInvoke(
void *_this,
ITypeInfo *ptinfo,
DISPID dispidMember,
WORD wFlags,
DISPPARAMS *pparams,
VARIANT *pvarResult,
EXCEPINFO *pexcepinfo,
UINT *puArgErr
);
Parâmetros
_this
Uma implementação da interface IDispatch descrita por ptinfo.
ptinfo
As informações de tipo que descrevem a interface.
dispidMember
O membro a ser invocado. Use GetIDsOfNames ou a documentação do objeto para obter o DISPID.
wFlags
Sinalizadores que descrevem o contexto da chamada Invoke .
pparams
Ponteiro para uma estrutura que contém uma matriz de argumentos, uma matriz de DISPIDs de argumento para argumentos nomeados e contagens para o número de elementos nas matrizes.
pvarResult
Ponteiro para onde o resultado deve ser armazenado ou Null se o chamador não espera nenhum resultado. Esse argumento será ignorado se DISPATCH_PROPERTYPUT ou DISPATCH_PROPERTYPUTREF for especificado.
pexcepinfo
Ponteiro para uma estrutura que contém informações de exceção. Essa estrutura deverá ser preenchida se DISP_E_EXCEPTION for retornado.
puArgErr
O índice dentro de rgvarg do primeiro argumento que tem um erro. Os argumentos são armazenados em pdispparams-rgvarg> em ordem inversa, portanto, o primeiro argumento é aquele com o índice mais alto na matriz. Esse parâmetro é retornado somente quando o valor retornado resultante é DISP_E_TYPEMISMATCH ou DISP_E_PARAMNOTFOUND.
Retornar valor
Código de retorno | Descrição |
---|---|
|
Êxito. |
|
O número de elementos fornecidos ao DISPPARAMS é diferente do número de argumentos aceitos pelo método ou propriedade. |
|
Um dos argumentos no DISPPARAMS não é um tipo variante válido. |
|
O aplicativo precisa gerar uma exceção. Nesse caso, a estrutura passada em pexcepinfo deve ser preenchida. |
|
O membro solicitado não existe. |
|
Essa implementação de IDispatch não dá suporte a argumentos nomeados. |
|
Um dos argumentos em DISPPARAMS não pôde ser coagido ao tipo especificado. |
|
Uma das IDs de parâmetro não corresponde a um parâmetro no método . Nesse caso, puArgErr é definido como o primeiro argumento que contém o erro. |
|
Um parâmetro necessário foi omitido. |
|
Não foi possível coagir um ou mais argumentos. O índice do primeiro parâmetro com o tipo incorreto dentro de rgvarg é retornado em puArgErr. |
|
Um dos parâmetros não é válido. |
|
Memória insuficiente para concluir a operação. |
Qualquer um dos erros ITypeInfo::Invoke também pode ser retornado.
Comentários
O parâmetro _this é um ponteiro para uma implementação da interface que está sendo adiada. DispInvoke cria um quadro de pilha, impõe parâmetros usando regras de coerção padrão, envia-os por push na pilha e, em seguida, chama a função membro correta no VTBL.
Exemplos
O código a seguir do arquivo de exemplo Linhas Lines.cpp implementa Invoke usando DispInvoke. Essa implementação depende do DispInvoke para validar argumentos de entrada. Para ajudar a minimizar os riscos de segurança, inclua o código que executa uma validação mais robusta dos argumentos de entrada.
STDMETHODIMP
CLines::Invoke(
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS * pdispparams,
VARIANT * pvarResult,
EXCEPINFO* pexcepinfo,
UINT * puArgErr)
{
return DispInvoke(
this, m_ptinfo,
dispidMember, wFlags, pdispparams,
pvarResult, pexcepinfo, puArgErr);
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | oleauto.h |
Biblioteca | OleAut32.lib |
DLL | OleAut32.dll |