Método IDispatch::Invoke (oaidl.h)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto. La función de distribución DispInvoke proporciona una implementación estándar de Invoke.

Sintaxis

HRESULT Invoke(
  [in]      DISPID     dispIdMember,
  [in]      REFIID     riid,
  [in]      LCID       lcid,
  [in]      WORD       wFlags,
  [in, out] DISPPARAMS *pDispParams,
  [out]     VARIANT    *pVarResult,
  [out]     EXCEPINFO  *pExcepInfo,
  [out]     UINT       *puArgErr
);

Parámetros

[in] dispIdMember

Identifica el miembro. Use GetIDsOfNames o la documentación del objeto para obtener el identificador de envío.

[in] riid

Reservado para un uso futuro. Debe ser IID_NULL.

[in] lcid

Contexto de la configuración regional en que se interpretan los argumentos. La función GetIDsOfNames usa el lcid y también se pasa a Invoke para permitir que el objeto interprete sus argumentos específicos de una configuración regional.

Las aplicaciones que no admiten varios idiomas nacionales pueden omitir este parámetro. Para obtener más información, consulte Compatibilidad con varios lenguajes nacionales y exposición de objetos ActiveX.

[in] 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 una propiedad o un miembro de datos.
DISPATCH_PROPERTYPUT
El miembro se cambia como una propiedad o miembro de datos.
DISPATCH_PROPERTYPUTREF
Un miembro cambia mediante una asignación de referencia, en lugar de una asignación de valor. Esta marca solo es válida cuando la propiedad acepta una referencia a un objeto .

[in, out] pDispParams

Puntero a una estructura DISPPARAMS que contiene una matriz de argumentos, una matriz de DISPID de argumentos para argumentos con nombre y cuenta el número de elementos de las matrices.

[out] pVarResult

Puntero a la ubicación 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.

[out] pExcepInfo

Puntero a una estructura que contiene información de excepciones. Esta estructura debe rellenarse si se devuelve DISP_E_EXCEPTION. Puede ser NULL.

[out] 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. Este argumento se puede establecer en NULL. Para obtener más información, consulte Devolver errores.

Valor devuelto

Este método puede devolver uno de estos valores.

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 la 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 coercar al 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_TYPEMISMATCH
No se pudo coercir uno o varios de los argumentos. El índice del primer parámetro con el tipo incorrecto dentro de rgvarg se devuelve en puArgErr.
DISP_E_UNKNOWNINTERFACE

El identificador de interfaz pasado en riid no es IID_NULL.
DISP_E_UNKNOWNLCID
El miembro que se invoca interpreta los argumentos de cadena según el LCID y el LCID no se reconoce. Si el LCID no es necesario para interpretar argumentos, este error no debe devolverse.
DISP_E_PARAMNOTOPTIONAL
Se omitió un parámetro necesario.

Comentarios

Por lo general, no debe implementar Invoke directamente. En su lugar, use la interfaz de distribución para crear funciones CreateStdDispatch y DispInvoke. Para obtener más información, consulte CreateStdDispatch, DispInvoke, Creating the IDispatch Interface and Exposing ActiveX Objects.

Si es necesario realizar algún procesamiento específico de la aplicación antes de llamar a un miembro, el código debe realizar las acciones necesarias y, a continuación, llamar a ITypeInfo::Invoke para invocar al miembro. ITypeInfo::Invoke actúa exactamente como Invoke. Las implementaciones estándar de Invoke creadas por CreateStdDispatch y DispInvoke se aplazan a ITypeInfo::Invoke.

En un cliente ActiveX, se debe usar Invoke para obtener y establecer los valores de las propiedades, o para llamar a un método de un objeto ActiveX. El argumento dispIdMember identifica el miembro que se va a invocar. Los DISPID que identifican miembros se definen mediante el implementador del objeto y se pueden determinar mediante la documentación del objeto, la función IDispatch::GetIDsOfNames o la interfaz ITypeInfo .

Al usar IDispatch::Invoke() con DISPATCH_PROPERTYPUT o DISPATCH_PROPERTYPUTREF, debe inicializar especialmente los elementos cNamedArgs y rgdispidNamedArgs de la estructura DISPPARAMS con lo siguiente:

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

La información siguiente aborda a los desarrolladores de clientes ActiveX y a otros usuarios que usan código para exponer objetos ActiveX. Describe el comportamiento que deben esperar los usuarios de objetos expuestos.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado oaidl.h

Consulte también

IDispatch