1 / 24

Introducci n a COM, DCOM y ATL

Introducci

Download Presentation

Introducci n a COM, DCOM y ATL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Introducción a COM, DCOM y ATL Edwin Montoya

    3. Reutilización de objetos Hechos OO Desarrollo basado en componentes Consecuencia -> reutilización El desarrollo hoy en día debe enfocarse a “pegar” lógicamente componentes y desarrollar componentes de NEGOCIO que faciliten la reutilización Problemas de la reutilización Multiples lenguajes Multiples S.O. Aún en mismos lenguajes – compatibilidad binaria –

    4. Lenguajes Orientados a Objetos Como se puede realizar código? Cut & Paste dentro de un mismo lenguaje En OO dependiendo del lenguaje (C++, Java) Se tiene abstracción, encapsulamiento y herencia Encapsulamiento y Herencia facilita la reutilización de forma limitada El problema es estos objetos NO pueden ser reutilizados en otros lenguajes Tambien existe incompatibilidades entre lenguajes iguales Binario y aún en fuente.

    5. Modelos de Componentes Solución a los problemas planteados anteriormente Un Modelo de Componentes es una especificación en la que se define entre otros: Estructura de componente, comunicación entre componentes, manipulación por parte de los ambientes de desarrolladores. Existen 3 modelos: COM, JavaBeans y CORBA CORBA en sí mismo NO es un modelo de componentes. Permite que componentes u objetos escritos en diferentes lenguajes se comuniquen entre sí JavaBean muy ligado a Java COM es una especificación binaria Un objeto COM puede crearse usando cualquier lenguaje, lo que importa es que la imagen binaria de ese objeto cumpla con la especificación COM Que es COM? COM es una especificación que define modelos de componentes binarios. COM NO es un Sistema, COM NO es una Librería.

    6. Estructura de COM Concepto Fundamental de COM: Separación entre la Interfaz Pública de un Componente y si Implementación. Interfaces COM, tablas de métodos o clases de objetos Un componente COM es un objeto que Implementa una o más interfaces. Tablas de punteros a métodos Terminología: Componente COM: Análogo a un objeto C++ aunque difiere Interfaz COM: conjunto de servicios expuestos por un componente COM, físicamente la interfaz es una tabla de punteros Servidor: los componentes COM se alojan en DLL o EXE. Son contenedores. Cliente: aplicación que hace uso e los servicios de un componente COM

    7. ¿Qué es una Interfaz? Un usuario de un componente COM NO tiene porque conocer la implementación. Basta con conocer las interfaces disponibles en el objeto. Una INTERFAZ es una tabla formada por PUNTEROS a métodos implementados por un cierto objeto. Una Interfaz es como una clase abstracta. Al crear un Componente COM hay que decidir que Interfaces implementará. Implementar una Interfaz significa que el objeto a crear tendrá que codificar TODOS los métodos indicados en ella. Para utilizar un cierto objeto, solo es preciso saber como recuperar un puntero a cualquiera de sus interfaces.

    8. Estructura de una Interfaz Una interfaz es una tabla con punteros a funciones. Equivalente a una clase abstracta

    9. Class IArchivo { public: virtual __stdcall HRESULT Abrir(…) = 0; virtual __stdcall HRESULT Escribir(…) = 0; virtual __stdcall HRESULT Leer(…) = 0; virtual __stdcall HRESULT Cerrar()= 0; }; La clase IArchivo es abstracta, no se puede instanciar, no hay constructor o destructor

    10. ¿Qué es un objeto COM? Un objeto COM es el motor que ejecuta los metodos definidos en las interfaces. Se utiliza el mecanismo de herencia para obtener la espec de la interfaz y otros aspectos COM. Se crea una nueva clase que derive de todas las interfaces COM. Otros aspectos COM: Control de ciclo de vida Resolución de interfaces Se utiliza la interfaz IUnkown para este objetivo En conclusión un objeto COM implementará todos los métodos de todas las interfaces definidas + los métodos de la interfaz Iunknown Un cliente NUNCA tiene acceso directo al objeto, lo hace a través de un puntero a una de sus interfaces de negocio o a través de IUnknown

    11. Estructura de un objeto

    12. ¿Qué es un servidor COM? Un objeto COM no existe de forma aislada, forman parte de Servidores COM. (Contenedores) Hay dos clases de servidores: DLL: Se ejecuta en el mismo espacio de direcciones del cliente Ejecutables: Se ejecuta otro programa con el cual se debe comunicar el cliente, ya sea mediante IPC (local) o RPC (remoto) Los servidores además de alojar y ejecutar los componentes realizan otras funciones como: Registrar componentes Crear factorias

    13. Estructura de un servidor El contenedor de primer nivel (servidor COM), es como una caja que cuenta con 3 elementos: (1) Clases de objetos, (2) Factorias y (3) Funciones adicionales como registro del servidor u obtención de una factoria para un cierto objeto.

    14. Más sobre Interfaces Interfaz: simple tabla de punteros mediante la cual es posible llamar a metodos disponibles en un objeto. Como codificar una interfaz independiente del lenguaje? Que representa la interfaz IUnknown? LENGUAJE IDL – Interface Definitio Languaje - IDL hace COM independiente del lenguaje IDL es un lenguaje descriptivo Se utilizará MIDL (Microsoft IDL) que viene con Visual C++ Interface IArchivo: IUnknown { HRESULT Abrir([in] LPOLESTR nombre); HRESULT Escribir([in] LPOLESTR datos, [in] int longitud); HRESULT Leer([in] LPOLESTR datos, [in] int longitud, [out, retval] int* bytesleidos); HRESULT Cerrar(); };

    15. Más sobre IDL Solo se soporta la herencia simple, NO Multiple Todo método retorna HRESULT el cual indica condición o no de error. Que pasa si un método retorna algún valor? Atributo retval [out, retval] tipo* … El precompilador MIDL toma un archivo *.idl y genera una Librería de Tipos, Archivos header para c/c++, modulo de código que contendrá identificadores de interfaces y objetos, proxys. La librería de tipos es la que se utiliza en otros lenguajes diferentes a c/c++. P.e. Visual Basic

    16. La Interfaz IUknown Un objeto para que sea COM tiene que implementar la interface IUnknown Objetivo: Ciclo de vida Resolución de interfaces Ciclo de vida AddRef() Release() Resolución de interfaces QueryInterface

    17. Identificador de Objetos e Interfaces Los nombre de objetos e interfaces son elementos con ambito reducido y válidos solo en una cierta aplicación o entorno de desarrollo. Se utilizan identificadores conocidos como GUID Global Unique Identifier Teoricamente son irrepetibles en el tiempo y espacio. 128 bits de longitud CLSID (Class Identifier), GUID que identifican componentes COM IID (Interface Identifier), GUID que identifican interfaces

    18. Mecanismos de puesta en marcha Puesta en marcha para un componente localizado en una DLL Contiene varias interfaces de las cuales nos interesa: Iarchivo El IID de la Interfaz es IID_IArchivo El CLSID del componente es CLSID_IArchivo Funciones básicas: CoInitialize() CoCreateInstance() Localización del servidor: Se invoca CoInitialize() Y luego CoCreateInstance() facilitando en CLSID La asociación del CLSID y el servidor es el Registro de Windows Si el servidor es una DLL utiliza la subclave: InprocServer32 Otros casos son: LocalServer32 ó RemoteServer32

    19. Obtención de la factoria En vez de llamar a CoCreateInstance() se usaria CoGetClassObject(), esto implica usar los métodos de la Interface IClassFactory.

    20. Introducción a DCOM (1) Distributed COM Utilizado en Clientes y Servidores outprocess Si están en la misma máquina: LIPC (Local Interprocess Communication)

    21. Introducción a DCOM (2) Utilizado en Clientes y Servidores en máquinas diferentes

    22. Procesos subrogados Se puede utilizar servidores remotos dentro de proceso utilizando un proceso sustituto o subrogado, cuya finalidad es poner en marcha al componente cargando la DLL. Un solo servidor puede ejecutar varios componentes Es como un contenedor remoto

    23. Marshaling Preparación de datos (parámetros y retornos) antes de realizar la transferencia por la red. Marshaling/demarshaling No hay necesidad en InProcess Se utiliza NDR: Network Data Representation MTS y COM+ El MTS (Microsoft Transaction Server) a parte de servir a la gestion de transacciones. Para que un servidor COM pueda instalarse en MTS es preciso que sea un servidor dentro de proceso (dll) El MTS cuenta con un mecanismo de Exploración/Registro y generación de archivos de instalación para los clientes. Esta misma funcionalidad se conoce en W2K como COM+. Con COM+ el desarrollo, distribución e instalacione de aplicaciones distribuidas es mucho más sencilla

    24. Introducción a ATL Active Template Library es un mecanismo de creación de componentes COM bajo Visual C++ que facilita su desarrollo y registro. Viene con Visual C++.

More Related