IDispatch

Ir a: navegación, búsqueda de

IDispatch es el interfaz de que expone la OLE automatización Protocolo.[1] Es una de las interfaces estándar que pueden estar expuestas al COM objetos. COM distingue entre tres tipos de interfaz: personalizados son las interfaces IUnknown VTABLE basado, envío de la que son las interfaces IDispatch introspección, de apoyo y doble interfaces de ambos tipos de apoyo.

La interfaz de automatización (IDispatch) permite que una aplicación cliente averiguar qué propiedades y métodos son compatibles con un objeto en tiempo de ejecución, es decir, implementa el concepto de RTTI. También proporciona la información necesaria para invocar estos métodos y propiedades. Aplicaciones de cliente no es necesario ser consciente de los miembros de objeto cuando se compilan. Esto permite a los objetos ActiveX y COM llama al script plataformas de programas tales como el ASP servidor y JavaScript en Internet Explorer, donde convenciones de llamada no eran conocidos en el momento IIS o es decir fueron construidos. Por el contrario, una biblioteca de objeto simple es compilada y vinculada a un programa, por ejemplo, una llamada dll, el cual necesita saber un nombre de función y los parámetros en tiempo de compilación.

Un guionista puede pedir el objeto COM de un método o propiedad ya sabe acerca de la documentación. A continuación, el cliente puede ejecutar la función con Invoke proporcionado por la interfaz IDispatch, una forma de enlace. Este tipo de capacidad también fue apoyada por Intercambio dinámico de datos (DDE), que nunca llegó a ser popular por ser demasiado baja.

Envío de la interfaces son flexibles, pero sufren más introspección e invocación arriba en comparación con personalizados interfaces.[2] Por lo tanto es a menudo una buena idea para apoyar ambos tipos de interfaz con doble interfaces. Así, pueden utilizar clientes apoyo llamada VTABLE basado en la personalizados interfaz en vez de la envío de la contrapartes.

Métodos

Cada propiedad y método implementado por un objeto que admite IDispatch interfaz tiene lo que se llama un identificador de envío, que es a menudo abreviado DISPID. El DISPID es el principal medio de identificación de una propiedad o método y deben ser entregado a la Invocar función de una propiedad o método a invocar, junto con una serie de Variantes que contiene los parámetros. El GetIDsOfNames función puede utilizarse para obtener el DISPID adecuado de un nombre de propiedad o método que está en cadena formato.

Se deriva de IDispatch IUnknown y amplía con cuatro métodos adicionales:

interfaz de IDispatch : público IUnknown {
  virtual HRESULT GetTypeInfoCount(sin firmar int * pctinfo) = 0;
  virtual HRESULT GetTypeInfo(sin firmar int iTInfo,
                              LCID LCID,
                              ITypeInfo ** ppTInfo
                             ) = 0;
  virtual HRESULT GetIDsOfNames(REFIID riid,
                                OLECHAR ** rgszNames,
                                sin firmar int cNames,
                                LCID LCID,
                                DISPID * rgDispId
                               ) = 0;
  virtual HRESULT Invocar(DISPID dispIdMember,
                         REFIID riid,
                         LCID LCID,
                         PALABRA wFlags,
                         DISPPARAMS * pDispParams,
                         VARIANTE * pVarResult,
                         EXCEPINFO * pExcepInfo,
                         sin firmar int * puArgErr
                        ) = 0;
};

El IDispatch ID de interfaz se define como un GUID con el valor de {00020400-0000-0000-C000-000000000046}.

Referencias

  1. ^ Microsoft MSDN: Interfaz IDispatch
  2. ^ Microsoft MSDN: ActiveX/COM Q & una de diciembre de 1995

Acoplamientos externos

  • DispHelper, un abrir-fuente Biblioteca de ayuda usar un IDispatch de C o C++.
  • IDispatchCodeGenerator, Generador de código. Característica que se agrega a un objeto IDispatch. La lengua es C++.

Otras Páginas

Obtenido de"https://en.copro.org/w/index.php?title=IDispatch&oldid=655520692"