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 .

Valor Significado
DISPATCH_METHOD
El miembro se invoca como un método . Si una propiedad tiene el mismo nombre, se puede establecer tanto esto como la marca DISPATCH_PROPERTYGET.
DISPATCH_PROPERTYGET
El miembro se recupera como propiedad o miembro de datos.
DISPATCH_PROPERTYPUT
El miembro se cambia como propiedad o miembro de datos.
DISPATCH_PROPERTYPUTREF
Una asignación de referencia cambia el miembro, en lugar de una asignación de valor. Esta marca solo es válida cuando la propiedad acepta una referencia a un objeto .

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
S_OK
Correcto.
DISP_E_BADPARAMCOUNT
El número de elementos proporcionados a DISPPARAMS es diferente del número de argumentos aceptados por el método o propiedad.
DISP_E_BADVARTYPE
Uno de los argumentos de DISPPARAMS no es un tipo de variante válido.
DISP_E_EXCEPTION
La aplicación debe generar una excepción. En este caso, la estructura pasada en pexcepinfo debe rellenarse.
DISP_E_MEMBERNOTFOUND
El miembro solicitado no existe.
DISP_E_NONAMEDARGS
Esta implementación de IDispatch no admite argumentos con nombre.
DISP_E_OVERFLOW
Uno de los argumentos de DISPPARAMS no se pudo convertir en el tipo especificado.
DISP_E_PARAMNOTFOUND
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.
DISP_E_PARAMNOTOPTIONAL
Se omitió un parámetro necesario.
DISP_E_TYPEMISMATCH
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.
E_INVALIDARG
Uno de los parámetros no es válido.
E_OUTOFMEMORY
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

Consulte también

CreateStdDispatch

Creación de funciones de API de distribución

IDispatch

IDispatch::Invoke

ITypeInfo::Invoke