htm=articulo/comdll.htm ok articulo/comdll.htm DLL ActiveX, la solución.

DLL ActiveX, la solución.

Comparación entre las DLLs clásicas y las modernas DLLs ActiveX.


Desde el primer Windows (la version 3 al menos), las Librerías de Enlace Dinámico (DLL) han servido para compartir código entre aplicaciones. Las DLLs contienen funciones que pueden ser usadas por varios programas a la vez, ahorrando memoria durante la ejecucion. Las DLLs facilitan tambien a los programadores distribuir código que va a ser usado por otros programadores.

    Sin embargo, las DLL clásicas tienen sus inconvenientes. Las nuevas DLL ActiveX evitan muchos de los problemas que presentaba el uso de DLL.

Las DLLs clásicas no exportan objetos ni variables, solo funciones. Cuando una DLL clásica contiene objetos es necesario implementar funciones públicas que accedan al objeto (interno). Un ejemplo extremo de esta práctica es la librería GDI. Esta librería contiene gran cantidad de objetos: contextos de dispositivo, paletas, lapices, brochas, bitmaps, y un largo etcétera. Cada uno de estos objetos implementa una larga lista de métodos miembro y cada método miembro es exportado a través de una funcion pública cuyo primer parámetro es un handle, el handle es el puntero (this) que identifica al objeto. Una librería creada así, contiene una larga lista de funciones exportadas que relentiza el proceso de carga y enlace dinámico de la librería.

    Las DLL ActiveX exportan objetos, los métodos de cada objeto se agrupan en una tabla y no es necesario realizar el enlace al cargar la librería.

Actualmente, la mayor parte del software se desarrolla usando métodos de programacion orientada a objetos. Se construyen librerías de objetos que encapsulan las llamadas a DLLs que contienen a su vez objetos. Sin embargo, el interface público de la DLL son funciones planas, no son objetos.

Algunos lenguajes pueden crear DLLs que exportan objetos, sin embargo estos objetos solo pueden ser usados por el lenguaje que creó la DLL. Incluso usando un solo lenguaje, como C++, los objetos creados con un compilador no pueden ser usados por programas creados con un compilador diferente.

    Las DLL ActiveX exportan objetos que pueden ser creados y usados por una gran variedad de lenguajes (practicamente todos). La programacion basada en objetos permite crear aplicaciones mas complejas a la vez que se simplifica su creación y mantenimieto. Solo por esto, ya valdría la pena migrar a la nueva tecnología AciveX.

Las DLLs cásicas permiten realizar enlace tardío, sin embargo algunos lenguajes no permiten usar este tipo de enlace. Incluso en lenguajes, como C y C++, en los que es posoble llevar a cabo el enlace tardío, los programadores prefieren el enlace en tiempo de compilación por ser más simple. Por eso, las aplicaciones cargan todas las DLLs que van a usar en el momento de arrancar y no las descargan hasta que el programa termina y si falta una DLL la aplicacion no se puede ejecutar (aborta durante el arranque).

    Las DLLs ActiveX no deben ser cargadas ni descargadas por parte de la aplicación. En general, la aplicacion solicita la creación de uno o varios objetos al sistema operativo y este se encarga de cargar la librería necesaria. Si el sistema no puede crear el objeto (falla al cargar la librería, etc...) la aplicacion es informada de ello y puede continuar su ejecución o abortar. Las Dlls ActiveX son descargadas automáticamente de la memoria cuando ninguno de sus objetos está activo (la aplicacion puede cambiar este comportamiento).

Frecuentemente se crean DLLs con el propósito de distribuir código binario sin facilitar los fuentes de este código. Es decir, un programador crea unas funciones que pone en una DLL y otros programadores usan estas funciones en sus programas. El programador que distibuye así su código debe acompañar la DLL de ficheros fuentes con, al menos, las declaraciones de las funciones exportadas. El formato de los ficheros fuente cambia según el lenguaje a utilizar, en general se distibuye un fichero de cabecera para C que puede ser usado tambien en C++. Los programadores que usan otros lenguajes deben traducir el fichero de cabecera para usar la DLL.

    ActiveX introduce el concepto de librería de tipos. La librería de tipos se puede incluir en la DLL como un recurso o bien se puede distribuir aparte. Una librería de tipos describe objetos, interfaces, métodos, tipos de datos, etc.. Tambien permite añadir a cada uno de estos elementos un texto corto de ayuda y/o un enlace a un fichero hlp de ayuda más amplio.

El uso de la nueva tecnología de DLLs ActiveX tiene muchas más ventajas, la mayor parte derivadas del uso de objetos COM en vez de funciones planas. Sin embargo este artículo solo pretende resaltar las diferencias entre las DLLs clásicas y las DLLs ActiveX, así que lo dejamos aquí.

.


© info3@maicas.net