Tutorial basico de como crear un servidor COM de proceso interno utilizando Visual C++ 6 y un cliente que haga uso de este componente COM desde Visual Basic 6.
1. Desarrollo de componentesCOM Introduccional desarrollo de servidores y clientes COM con Visual C++ y Visual Basic respectivamente. COM101
2. Desarrollo de componentes COM Podemos entender a COM como una especificacion determinada por una serie de reglas y mecanismos que nos permiten la creacionde 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.
3.
4.
5. Desarrollo de componentes COM Para crear un GUID utilizaremos la utilidad GUIDGEN.EXE que normalmente viene con las herramientas de Visual Studio y Visual C++, aunque tambien podemos utilizar un algoritmo para generarlo en nuestro codigo. Tambien podemos utilizar una funcion llamada CoCreateGuid que no documentamos aquí pero que te puede ser de utilidad, en ese caso consulta la documentacion en linea.
6. 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. Equivalencias entre COM y CORBA para el cargador. SCUM en COM ORB en CORBA
7. 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, Release). El metodoQueryInterface de IUnkown permite consultar a un objeto COM si proporciona una interfaz determinada. En ese caso devuelve un puntero valido a la Interfaz.
8. 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++. 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. Al compilar el IDL con la herramienta MIDL proporcionada por Visual C++ se genera la librería de tipo que podemos utilizar posteriormente.
9. 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, estos son la contencion y la agregacion. 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. Agregacion: El objeto interno envia todas las llamadas de QueryInterface (IUnkown interno) a la implementacionIUnknown del objeto externo.
10. Desarrollo de componentes COM Creamos un servidor COM con Visual C++ 6. (Abrimos nuestro Visual C++ 6) Creamos un nuevo proyecto ATL/COM App Wizard. File -> new Projects Seleccionamos ATL COM APP Wizard ServidorSimple (nombre) y le damos a OK. Seleccionamos Dinamic link library como tipo de servidor Finishy OK. (Ya tenemos el proyecto abierto y listo)
11. Desarrollo de componentes COM Añadimos una clase COM con ATL ObjectWizard a nuestro proyecto. Insert -> new ATL Object Objects -> Simple Object y le damos a Next. Shortname le damos de nombre HelloWorld y veremos como las demas casillas se autocompletan automaticamente. Lo dejamos asi y pulsamos Aceptar. Añadimos un metodo a nuestra clase COM. Boton derecho sobre la interfaz en el explorador de clases y pulsamos AddMethod. Como nombre le damos ShowThis En parameters ponemos esto: [out, retval] BSTR *bstrOutput OK. Ahora buscamos la definicion del metodoShowThis y añadimos el siguiente codigo: *bstrOutput = SysAllocString(L"Hola Mundo desde un servidor COM"); justo antes de return S_OK;
12. Desarrollo de componentes COM Ahora vamos al Explorador de FileView del proyecto y observamos que en la carpeta Source Files existe HelloWorld.cpp que contiene nuestro metodoShowThis. Digamos que esto es un Hola Mundo COM simplificado ya que suelen ser un poco mas complejo, pero pienso que de esta manera sera sencillo introducirnos en el mundo COM y conocer sus mecanismos basicos sin tantos quebraderos de cabeza. Ahora vamos al explorador FileView y sobre la interfaz idl pulsamos boton derecho del raton y seleccionamos compilar «compile ServidorSimple.idl». Al compilarlo deberias de ver en la ventana Build algo asi: ServidorSimple.tlb - 0 error(s), 0 warning(s) «Esta es la librería de tipo» hay que fijarse en su extension terminada .tlb que hace referencia a que es una librería de tipo. Ahoracompilamoshacemos un build del proyectocompleto y obtendremos la siguientesalida: UnServidorSimple.dll - 0 error(s), 0 warning(s)
13.
14. Desarrollo de componentes COM Enhorabuena! Ya has hechotuprimeraaplicacionCliente/Servidorutilizando la tecnologia COM. No deberiashabertenidoningunproblema a la hora de completareste tutorial de inicio en COM si has utilizadolasversiones de Visual C++ 6 y de Visual Basic 6. Ante cualquierduda o sugerenciacontactar : Charly ASAP lpgc.carlos@gmail.com www.edicionempresarial.com