You are on page 1of 14

Desarrollo de componentes

COM
Introduccion al desarrollo de servidores y clientes COM con
Visual C++ y Visual Basic respectivamente.
COM101

Desarrollo de componentes COM Podemos entender a COM como una especificacion determinada por una serie de reglas y mecanismos que nos permiten la creacion de componentes de software independientemente del lenguaje en el que han sido escritos. Un componente de software puede verse como una pieza de software binaria que puede reutilizarse por otras aplicaciones que las cargan como clientes o consumidores. .

. en otra maquina e incluso en otro sistema operativo). Desarrollo de componentes COM Caracteristicas principales de COM: - Independencia del lenguaje de programacion: Puedes crear un componente usando Visual C++ 6 y consumirlo usando Visual Basic 6 como veremos mas adelante. Transparencia de localizacion: Nos permite consumir un componente si preocuparnos de donde se encuentra. A la hora de reutilizar un coponente de software podemos encontrarlo en varios sitios (como librería dinamica o estatica.

Los GUID se usan para identificar a las clases COM denominadas Clases ID o CLSID. CLSID GUID IID . Un GUID es un entero de 16 bytes (128bits). Desarrollo de componentes COM Todo componente COM utiliza un «Identificador Globalmente Unico» tambien conocido como GUID. Tambien son utilizados para identificar interfaces COM conocidas como IID o Interfaces ID.

EXE que normalmente viene con las herramientas de Visual Studio y Visual C++. en ese caso consulta la documentacion en linea. Tambien podemos utilizar una funcion llamada CoCreateGuid que no documentamos aquí pero que te puede ser de utilidad. . aunque tambien podemos utilizar un algoritmo para generarlo en nuestro codigo. Desarrollo de componentes COM Para crear un GUID utilizaremos la utilidad GUIDGEN.

SCUM en COM ORB en CORBA . Equivalencias entre COM y CORBA para el cargador. Desarrollo de componentes COM La parte de software que se encarga de encontrar un objeto COM e inicializarlo y cargarlo en memoria se denomina «Service Control Manager» tambien conocido como SCUM y es parte del sistema operativo de Windows.

. Desarrollo de componentes COM Cuando el servidor COM ya no lo necesitamos mas lo podemos descargar de memoria o apagar a traves de los metodos declarados en la interfaz «IUnknown» (QueryInterface. AddRef. En ese caso devuelve un puntero valido a la Interfaz. Release). El metodo QueryInterface de IUnkown permite consultar a un objeto COM si proporciona una interfaz determinada.

Para poder crear una librería de tipo hay que crear las clases del servidor COM y describir sus interfaces utilizando el lenguaje de descripcion conocido como IDL. Desarrollo de componentes COM Para describir un componente independientemente del lenguaje en el que fue escrito se crea una librería de tipo. El archivo de la librería de tipo es un archivo binario que contiene el mismo tipo de informacion que encontraria en un archivo de cabezera de C+ +. Al compilar el IDL con la herramienta MIDL proporcionada por Visual C++ se genera la librería de tipo que podemos utilizar posteriormente. .

Desarrollo de componentes COM Hay dos conceptos en COM que debemos revisar antes de continuar aunque tampoco son un requisito indispensable para introducirnos en la tecnologia. Contencion: En la contencion de objetos COM se instancia un objeto interno y se crea una interfaz externa que se comunica y delega con la interfaz del objeto interno. estos son la contencion y la agregacion. . Agregacion: El objeto interno envia todas las llamadas de QueryInterface (IUnkown interno) a la implementacion IUnknown del objeto externo.

1. (Abrimos nuestro Visual C++ 6) Creamos un nuevo proyecto ATL/COM App Wizard. Seleccionamos ATL COM APP Wizard 3. Desarrollo de componentes COM Creamos un servidor COM con Visual C++ 6. Seleccionamos Dinamic link library como tipo de servidor 5. ServidorSimple (nombre) y le damos a OK. Finish y OK. (Ya tenemos el proyecto abierto y listo) . File -> new Projects 2. 4.

En parameters ponemos esto: [out. Boton derecho sobre la interfaz en el explorador de clases y pulsamos Add Method. Insert -> new ATL Object 2. 4. Lo dejamos asi y pulsamos Aceptar. Como nombre le damos ShowThis 6. justo antes de return S_OK. 3. retval] BSTR *bstrOutput 7. OK. Ahora buscamos la definicion del metodo ShowThis y añadimos el siguiente codigo: *bstrOutput = SysAllocString(L"Hola Mundo desde un servidor COM"). Desarrollo de componentes COM Añadimos una clase COM con ATL Object Wizard a nuestro proyecto. . Objects -> Simple Object y le damos a Next. 1. Añadimos un metodo a nuestra clase COM. 5. Shortname le damos de nombre HelloWorld y veremos como las demas casillas se autocompletan automaticamente.

Desarrollo de componentes COM Ahora vamos al Explorador de FileView del proyecto y observamos que en la carpeta Source Files existe HelloWorld.0 error(s).idl».0 error(s).tlb que hace referencia a que es una librería de tipo. 0 warning(s) .dll .tlb . Al compilarlo deberias de ver en la ventana Build algo asi: ServidorSimple.cpp que contiene nuestro metodo ShowThis. Ahora compilamos hacemos un build del proyecto completo y obtendremos la siguiente salida: UnServidorSimple. Digamos que esto es un Hola Mundo COM simplificado ya que suelen ser un poco mas complejo. Ahora vamos al explorador FileView y sobre la interfaz idl pulsamos boton derecho del raton y seleccionamos compilar «compile ServidorSimple. pero pienso que de esta manera sera sencillo introducirnos en el mundo COM y conocer sus mecanismos basicos sin tantos quebraderos de cabeza. 0 warning(s) «Esta es la librería de tipo» hay que fijarse en su extension terminada .

0 Type Library” y lo seleccionamos. Creamos un formulario con un boton y tenemos el codigo como sigue: Private Sub Command1_Click() Dim object As New UNSERVIDORSIMPLELib.HelloWorld Dim interface As IHelloWorld Set interface = object MsgBox interface. Desarrollo de componentes COM Ahora abrimos una ventana de comandos con permisos administrativos si nos encontramos en una version de windows reciente y escribimos en el directorio donde generamos la dll el siguiente comando: Ø regsvr32 ServidorSimple.ShowThis End Sub .dll Esto registra la DLL en memoria y asi la tenemos a disposicion de otras aplicaciones. Ahora abrimos Visual Basic 6 y creamos un proyecto nuevo y en el menu Project ->References buscamos nuestro componente en la lista “ServidorSimple 1.

edicionempresarial. No deberias haber tenido ningun problema a la hora de completar este tutorial de inicio en COM si has utilizado las versiones de Visual C++ 6 y de Visual Basic 6.com .com www. Ante cualquier duda o sugerencia contactar : Charly ASAP lpgc. Desarrollo de componentes COM Enhorabuena! Ya has hecho tu primera aplicacion Cliente/Servidor utilizando la tecnologia COM.carlos@gmail.