OLE, ActiveX y demás historias

Hace poco volvió a salir en el foro el eterno tema de qué significa cada uno de los términos relacionados con OLE. No es algo nuevo, ya que existe desde hace mucho una confusión generalizada respecto a esto, causada principalmente por Microsoft, ya que ha ido cambiando los términos con el tiempo; cada vez que sacaba algo nuevo basado en esta tecnología lo bautizaba con algún término nuevo, y renombraba los anteriores para que pareciera que todo todo era nuevo, cuando en realidad la tecnología ha sido siempre la misma, y lo que se ha ido añadiendo han sido las distintas aplicaciones basadas en ella.


En este artículo trataré de aclarar un poco algunos de estos términos, explicándolo de la forma más clara posible y con palabras que todos entendamos, pero sin entrar en detalles técnicos que sólo traerían más confusión. No obstante, debéis tener en cuenta que me voy a basar no sólo en la documentación de MS, sino en términos ampliamente aceptados por la comunidad de programadores y en mi propio punto de vista. Es posible que otros autores no coincidan conmigo, y si alguien quiere discutir algún aspecto de este artículo puede usar los comentarios.

  • COM: es un tipo de interface binario entre distintos componentes de software. Conceptualmente equivale a CORBA. Vamos, que lo que define es la forma en que los compiladores (de C o del lenguaje que sea) van a crear las estructuras de datos en memoria que serán compartidas entre distintos componentes de software y cómo tienen que manejarlas esos componentes. Salvando las distancias, es como el motor de objetos de [x]Harbour, que especifica qué tipo de miembros soporta (DATAs, METHODs, …) y cómo se usan (instanciación, operador de acceso, ámbitos de visibilidad, métodos universales como ::Classname, etc.). Por lo que respecta a nosotros, no vamos a lidiar directamente con COM, así que nos basta con saber en qué consiste.
  • OLE o ActiveX: es un modelo de implementación basado en COM, cuya principal característica es la obligación de usar o implementar la interface IDispatch. Esta es una interface COM estándar diseñada para permitir el acceso a componentes de forma dinámica, es decir, que los compiladores no tienen que resolver en el momento de la compilación y enlazado los punteros a cada uno de los métodos del componente. Al contrario, cualquier componente se puede instanciar de una forma genérica e invocar sus métodos y propiedades también de forma genérica. Esta es precísamente la forma que tiene de trabajar TOleAuto. Ahora bien, hay que tener en cuenta que muchos componentes ActiveX soportan lo que se llama interface dual, que consiste en que se pueden usar bien a través de IDispatch o bien conociendo previamente sus miembros y resolviendo los punteros en tiempo de compilación, lo que redunda en un acceso mucho más rápido al componente. También hay que destacar que los términos OLE y ActiveX se usan a veces incorrectamente, haciendo referencia a componentes COM que no son ActiveX. Un ejemplo de esto viene de la mano de la propia MS, que nombra a una categoría de componentes de acceso a bases de datos como OLE Providers o Proveeedores OLE, cuando en realidad son componentes que implementan una determinada jerarquía de intarfaces COM. El verdadero componente ActiveX en este caso es ADO.
  • Componente ActiveX o servidor OLE: es un componente de software que implementa exactamente el modelo ActiveX. El nombre de OLE automation server o servidor de automatización OLE es el nombre que tenían estos componentes antiguamente, que fue reemplazado por el de componente ActiveX. Ejemplos de estos hay muchos, y los más significativos son los componentes de MS Office: Word, Excel, Outlook, etc.. Tienen una limitación, que es que en el caso de tener interface de usuario, tienen que crear sus propias ventanas y/o diálogos. Es decir, no podemos usarlos como un control sobre una ventana de nuestra propia aplicación. Al principio tampoco soportaban eventos, aunque posteriormente sí se añadió este soporte, y ha dado lugar a que algunos componentes ActiveX con soporte de eventos se los confunda con OCX.
  • Controles ActiveX u OCX: son componentes ActiveX en forma de control. Es decir, no crean sus propias ventanas, sino que los tenemos que colocar sobre alguna ventana o diálogo de nuestra aplicación. Este hecho implica necesariamente el soporte de eventos, ya que el propio OCX necesita notificar a su contenedor determinados hechos (p.ej. la obtención o pérdida del foco de teclado). Hay algunos eventos estándar en todos los OCX, aunque no siempre estén implementados, y otros que son específicos de cada OCX. Una característica adicional de los OCX es la obligación de implementar una typelib. Esta typelib permite interrogarle para conocer todos sus miembros (propiedades, métodos e incluso constantes que tiene definidas) y es aprovechado por los distintos IDE (incluido el de Xailer) para poder manipularlos en tiempo de diseño.

Un comentario en “OLE, ActiveX y demás historias

  1. Daniel Du Pré

    Jose:
    Me resultan muy útiles estas aclaraciones y seguramente a muchos como yo también, dado que me quedé en la «era de Clipper para MS-DOS» y estoy dando un salto muy largo (en vez de dar varios pasos) al pasarme a Xailer. Me gustaría si no es mucha molestia que en cada termino que nombras (si es que se puede) menciones un ejemplo; como ser, cuando dices: «OCX son componentes ActiveX en forma de control»…como por ejemplo …..

    Muchas gracias.

    PD: eres un gran maestro

Responder a Daniel Du Pré Cancelar la respuesta