htm=articulo/complug.htm ok articulo/complug.htm Desarrollo de plugins con COM.

Desarrollo de plugins con COM.

De como la tecnología ActiveX facilita la creación de plugins.


Que es un plugin ?

Los plugins - módulos conectables o complementos - son módulos software que añaden funcionalidad a un programa. Las caracteristicas fundamentales de los plugins son:

  1. Pueden ser cargados y descargados a voluntad por el programa principal. El programa principal funciona bien sin plugins.
  2. Se desarrollan con posterioridad al programa principal. Durante el desarrollo del programa principal se desconoce cuales son los plugins que se van a desarrollar.

De los dos puntos anteriores se deduce que un plugin no puede ser linkado estáticamente a la aplicacion durante la compilación. Por el contrario, será necesario implementar el enlace en tiempo de ejecución.

Al desarrollar el programa principal hay que preveer el método que se va a usar para implementar los plugins. El uso de objetos COM permite simplificar enormemente el soporte de plugins, ya que COM provee los mecanismos para crear y destruir objetos, es independiente del lenguaje, usa enlace en tiempo de ejecución y soporta objetos en proceso (DLL), fuera de proceso (EXE) e incluso objetos remotos, todo ello sin que el programador tenga que realizar ningún trabajo extra.

Solo es necesario conocer el nombre de un objeto (o su CLSID) para crearlo. Así la aplicación principal puede estar dotada de un fichero .INI (o algún mecanismo equivalente) con una seccion [plugins], de modo que al instalar un plugin se registra su nombre o CLSID en dicho fichero .INI

Así pues, convengamos en que, para nosotros, un plugin es un objeto COM cuyo nombre o CLSID se encuentra registrado en el fichero .INI de la aplicación.

Tipos de plugins.

Podemos clasificar los plugins en dos tipos:

  1. Pugins cuya funcionalidad se conoce durante la creacion de la aplicación.
  2. Plugins cuya funcionalidad se desconoce durante la creacion de la aplicación.

Un ejemplo de plugin del primer tipo sería el caso de una aplicacion dedicada al tratamiento de gráficos en la cual se prevee la posibilidad de añadir filtros gráficos a la aplicacion usando plugins. Es decir que durante el desarrollo de la aplicación no se han desarrollado los plugins, pero al menos se sabe que van a añadirse posteriormente unos plugins para el tratamiento de los gráficos.

Necesitaremos un plugin del segundo tipo cuando, una vez terminada la aplicacion, necesitamos añadir una funcionalidad nueva que no se había previsto antes. Siguiendo con el mismo ejemplo, supongamos que se desea añadir la posibilidad de leer imágenes de internet usando el protocolo http.

Es evidente que los plugins del primer tipo son más faciles de diseñar e implementar que los del segundo tipo.

Plugins del primer tipo.

Para soportar plugins del primer tipo basta declarar un interface COM con los métodos necesarios para soportar la funcionalidad del plugin y exigir que los plugins soporten ese interface.

En el ejemplo anterior, declaramos un interface con un solo método que acepta como entrada un bitmap y devuelve el bitmap modificado. Cualquier objeto COM que soporte este interface podrá actuar como plugin para filtrar imágenes.

Durante el desarrollo de la aplicacion se declara el interface, ya que sabemos de antemano que va a ser necesario añadir plugins con este cometido. Una vez terminada la aplicación, se pueden crear cuantos plugins sean necesarios pero ya no se puede modificar el interface.

Plugins del segundo tipo.

Si durante el desarrollo de la aplicacion se desconoce cual va a ser el trabajo que va desarrollar un plugin, es imposible declarar un interface que dé soporte a dicha funcionalidad. En este caso se declara un interface genérico para inicializar el plugin, y se le da a éste la posibilidad de acceder a todos los componentes de la aplicacion.

La aplicacion debe estar constuituida por un conjunto de objetos COM, cada uno de los objetos debe permitir el acceso a otros objetos que se realcionan con él. Por ejemplo, se crea un objeto principal Application, este objeto mantiene una coleccion de objetos Window, cada objeto Window puede contener un objeto Menu, etc...   Cuando se carga un plugin, se le pasa a este una referencia al objeto principal Application, de este modo el plugin puede recorrer la jerarquía de objetos que constituyen la aplicación. Al crear la aplicación, se puede crear una librería de tipos que describa todos los objetos de la aplicación, de este modo se facilita en desarrollo posterior de plugins.


© info3@maicas.net