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 .
[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 |
---|---|
|
Correcto. |
|
El número de elementos proporcionados a DISPPARAMS es diferente del número de argumentos aceptados por el método o la 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 coercar al 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. |
|
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. |
|
El identificador de interfaz pasado en riid no es IID_NULL. |
|
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. |
|
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 |