| Artículos | 01 OCT 1998

Creación de librerías de tipos ActiveX

Tags: Histórico
Cómo usar objetos COM que no cuentan con una librería de tipos
Francisco Charte.

Una librería de tipos almacena la información necesaria para que ciertas herramientas, como los examinadores de objetos o los entornos de programación, puedan conocer y crear objetos COM y usar sus interfaces . En ocasiones, sin embargo, estas librerías de tipos no están disponibles .

Seguramente estará preguntándose para qué sirve un objeto ActiveX si no existe una librería de tipos que permita utilizarlo . Bien, actualmente la librería de tipos es sólo uno de los recursos que los programadores pueden utilizar, siendo posible describir objetos COM y sus interfaces en archivos de cabecera, en el caso de C++, y en módulos de interfaz, en el caso de Object Pascal ( Delphi ) .

Existen multitud de objetos e interfaces COM que no cuentan con una librería de tipos, a pesar de lo cual pueden ser usados sin muchos problemas por algunas herramientas de programación . El Escritorio Activo, DirectX, la shell de Windows, etc . , son elementos que exponen objetos COM o se pueden programar creando nuevos objetos COM . Al tiempo, no obstante, son elementos que no cuentan con una librería de tipos .

El equipo de trabajo de Microsoft que se encarga de la creación de los citados elementos, que con el tiempo pasan a formar parte del sistema, siempre facilita como recursos de programación los archivos de cabecera necesarios para trabajar con C++ . Estos archivos son fácilmente traducibles de C++ a otros lenguajes, como es el caso de Object Pascal, pero no pueden usarse, por contra, con herramientas como Visual Basic .

El resultado: los programadores de este último entorno, que curiosamente también está desarrollado por Microsoft, se ven relegados a quedar a la espera de que alguien desarrolle una librería de tipos, elemento sin el cual no pueden utilizar las últimas novedades incorporadas al SO por el mismo desarrollador que les facilita la herramienta de programación .

¿ Qué es una librería de tipos ActiveX ?

Se conoce como ?librería de tipos ActiveX? a un documento compuesto, normalmente con extensión TLB, que contiene información diversa relativa a tipos, objetos e interfaces pertenecientes a una determinada aplicación . Aunque una librería de tipos podría usarse exclusivamente para definir tipos de datos, enumeraciones y almacenar prototipos de funciones, lo habitual es que se usen, de forma preferente, para describir objetos COM y sus interfaces .

Una librería de tipos es un archivo binario que puede facilitarse de forma independiente, con la citada extensión TLB, o bien incluirse como un recurso más en una librería de enlace dinámico o un ejecutable ActiveX . Los componentes ActiveX, por poner un ejemplo, son librerías de enlace dinámico, con extensión DLL u OCX, que almacenan en su interior una librería de tipos . Mediante ese recurso, que se identifica con el tipo typelib, herramientas como Delphi o Visual Basic pueden obtener información acerca de las propiedades, métodos y eventos con que cuenta el control, facilitando su uso por parte del programador .

La creación de librerías de tipos se efectúa de forma diferente según la herramienta de desarrollo que usemos . En Visual Basic, por ejemplo, cada vez que se crea un módulo de clase automáticamente se genera una librería de tipos con información de él, librería que se escribe en la DLL o ejecutable que finalmente aloje la clase . Es un planteamiento realmente sencillo y cómodo, ya que el programador no tiene por qué preocuparse de la librería de tipos, esto es trabajo de la propia herramienta de desarrollo . Como contrapartida,sin embargo, nos encontramos con la imposibilidad de definir manualmente cualquier interfaz que nos interese .

Otros entornos, como Delphi y C++ Builder, cuentan con una utilidad que facilita de forma notable tanto la creación como manipulación de librerías de tipos . Como puede observarse en la figura 1, una lista jerárquica nos permite ver todos los elementos existentes en la librería de tipos, tales como interfaces, tipos de datos y clases de objetos . El panel derecho facilita la edición de los atributos del elemento elegido en la lista anterior, mientras que la barra de botones que hay en la parte superior da paso a las acciones más habituales .

No obstante, no es preciso disponer de un editor de librerías de tipos para poder crear una . En realidad, lo único que precisamos es un editor de texto cualquiera, para crear una descripción en ODL, y el compilador de librerías de tipos de Microsoft, al que tienen acceso incluso los usuarios de Visual Basic puesto que se facilita en el directorio TOOLS del CD-ROM .

MIDL y ODL

Las librerías de tipos ActiveX pueden ser descritas usando dos lenguajes diferentes: MIDL ( Microsoft Interface Definition Language ) y ODL ( Object Description Language ) . El primero es un superconjunto del segundo, es decir, acepta toda la sintaxis de ODL y cuenta, además, con elementos IDL que permiten generar automáticamente archivos en C/C++ que actúan como proxys de un objeto o como interfaces RPC . ODL, por el contrario, está pensado casi exclusivamente para la creación de librerías de tipos, aunque también puede generar archivos de cabecera .

Una descripción MIDL se almacena en un archivo con extensión IDL, compilándose mediante la herramienta Midl . Exe que forma parte del Microsoft Win32 SDK . Si usamos ODL para crear nuestra librería de tipos, la descripción se almacenará en un archivo con extensión ODL que habrá de compilarse con la herramienta Mktyplib . Exe . Aunque según Microsoft es preferible usar la primera en detrimento de la segunda, lo cierto es que los programadores Visual Basic que no dispongan del citado SDK sólo tienen una opción: usar el programa Mktyplib . Exe, que se encuentra en la carpeta Tools\Unsupprt\Typlib, ya que no cuentan con la utilidad Midl . Exe .

El lenguaje ODL es bastante sencillo, sobre todo si está acostumbrado a trabajar con C o C++, ya que su sintaxis es muy parecida . ODL, no obstante, no es un lenguaje de programación, sino un lenguaje descriptivo . Con él lo único que haremos será facilitar un prototipo de un objeto, una interfaz o una función, sin entrar en los detalles de su implementación .

Para poder describir un objeto y sus interfaces necesitamos, como es lógico, conocerlos con detalle . Tenemos que saber cuál es el CLSID ( Class Identifier ) del objeto y los IID ( Interface Identifier ) de sus interfaces, cuál es la interfaz por defecto, qué métodos tiene cada interfaz, qué parámetros y de qué tipos precisa cada método, etc . De forma adicional podemos precisar datos acerca de tipos de datos específicos y enumeraciones que sean necesarias para el funcionamiento del objeto o sus interfaces .

Todos estos datos se pueden obtener a partir de diversas fuentes: archivos de ayuda de la API de Windows, documentación escrita, archivos de cabecera de C/C++, inspeccionando el registro de Windows, etc . Lo mejor sería, sin duda, disponer del archivo de cabecera en que se describe el objeto y sus interfaces, de esta forma sólo tendríamos que interpretar los prototipos traduciéndolos a ODL .

Sintaxis ODL

Obviamente, si vamos a crear nuestras librerías de tipos con ODL, lo primero que tenemos que hacer es aprender la sintaxis de este lenguaje, que podríamos resumir de la siguiente forma:

[ atributos de la librería ]

library nombre {

[ atributos ] sentencia;

[ atributos ] sentencia;

. . .

}

Como puede ver, a excepción de los atributos de la librería, que se encuentran al inicio y entre corchetes, todas las sentencias de una librería de tipos forman parte del bloque que sigue a la palabra clave library . Cada sentencia puede ir precedida de unos atributos, sie

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información