Función DispInvoke (oleauto.h)
Llama automáticamente a funciones miembro en una interfaz, dada la información de tipo de la interfaz. Puede describir una interfaz con información de tipo e implementar Invoke para la interfaz mediante esta única llamada.
Sintaxis
HRESULT DispInvoke(
void *_this,
ITypeInfo *ptinfo,
DISPID dispidMember,
WORD wFlags,
DISPPARAMS *pparams,
VARIANT *pvarResult,
EXCEPINFO *pexcepinfo,
UINT *puArgErr
);
Parámetros
_this
Implementación de la interfaz IDispatch descrita por ptinfo.
ptinfo
Información de tipo que describe la interfaz.
dispidMember
Miembro que se va a invocar. Use GetIDsOfNames o la documentación del objeto para obtener el DISPID.
wFlags
Marcas que describen el contexto de la llamada invoke .
pparams
Puntero a una estructura que contiene una matriz de argumentos, una matriz de argumentos DISPID para argumentos con nombre y cuenta el número de elementos de las matrices.
pvarResult
Puntero al lugar donde se va a almacenar el resultado o Null si el autor de la llamada no espera ningún resultado. Este argumento se omite si se especifica DISPATCH_PROPERTYPUT o DISPATCH_PROPERTYPUTREF.
pexcepinfo
Puntero a una estructura que contiene información de excepción. Esta estructura debe rellenarse si se devuelve DISP_E_EXCEPTION.
puArgErr
Índice dentro de rgvarg del primer argumento que tiene un error. Los argumentos se almacenan en pdispparams-rgvarg> en orden inverso, por lo que el primer argumento es el que tiene el índice más alto de la matriz. Este parámetro solo se devuelve cuando el valor devuelto resultante es DISP_E_TYPEMISMATCH o DISP_E_PARAMNOTFOUND.
Valor devuelto
Código devuelto | Descripción |
---|---|
|
Correcto. |
|
El número de elementos proporcionados a DISPPARAMS es diferente del número de argumentos aceptados por el método o propiedad. |
|
Uno de los argumentos de DISPPARAMS no es un tipo de variante válido. |
|
La aplicación debe generar una excepción. En este caso, la estructura pasada en pexcepinfo debe rellenarse. |
|
El miembro solicitado no existe. |
|
Esta implementación de IDispatch no admite argumentos con nombre. |
|
Uno de los argumentos de DISPPARAMS no se pudo convertir en el tipo especificado. |
|
Uno de los identificadores de parámetro no corresponde a un parámetro del método . En este caso, puArgErr se establece en el primer argumento que contiene el error. |
|
Se omitió un parámetro necesario. |
|
No se pudieron coercir uno o varios de los argumentos. El índice del primer parámetro con el tipo incorrecto dentro de rgvarg se devuelve en puArgErr. |
|
Uno de los parámetros no es válido. |
|
Memoria insuficiente para completar la operación. |
También se puede devolver cualquiera de los errores ITypeInfo::Invoke .
Comentarios
El parámetro _this es un puntero a una implementación de la interfaz a la que se aplaza. DispInvoke crea un marco de pila, coerces parámetros mediante reglas de coerción estándar, los inserta en la pila y, a continuación, llama a la función miembro correcta en el VTBL.
Ejemplos
El código siguiente del archivo de ejemplo Lines Lines.cpp implementa Invoke mediante DispInvoke. Esta implementación se basa en DispInvoke para validar argumentos de entrada. Para ayudar a minimizar los riesgos de seguridad, incluya código que realice una validación más sólida de los 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 | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | oleauto.h |
Library | OleAut32.lib |
Archivo DLL | OleAut32.dll |