# Object Linking and Embedding

Object Linking and Embedding (OLE), cuya traducción literal es "incrustación y enlazado de objetos", es el nombre de un sistema de objetos distribuido y un protocolo desarrollado por Microsoft.
OLE permite a un editor encargar a otro la elaboración de parte de un documento y posteriormente volverlo a importar. Por ejemplo, un sistema de publicación de escritorio puede enviar un poco de texto a un procesador de textos o una imagen a un editor de bitmap usando OLE. La ventaja principal de usar OLE, además de que el tamaño del archivo es menor, es la de poder crear un archivo principal. Se puede hacer una referencia a los datos de ese archivo, con lo que todo cambio posterior en el archivo principal se reflejará en el documento referenciado.
Su uso principal es el manejo de documentos compuestos (compound documents), pero también puede ser usado para transferir datos entre aplicaciones diferentes mediante "arrastrar y soltar" (Drag 'n drop) o el portapapeles. El concepto de "incrustación" (embedding) es clave también en páginas web multimedia, que suelen contener videos, animaciones (incluidas las animaciones Flash) y archivos de música referenciados dentro del código HTML.
Sin embargo, OLE se fundamenta en una arquitectura de tipo «cliente pesado» (fat client), que requiere que todos los archivos y recursos incrustados residan en la máquina local, es decir, aquella en la que se trabaja. Por ejemplo, si un usuario quisiera procesar una hoja de cálculo de Microsoft Excel, o incluso sólo visualizarla, debería tener una copia de Excel previamente instalada en su equipo (o al menos un visor compatible de planillas Excel).

## Tecnología

OLE 1.0, lanzado en 1990, fue la evolución de su antecesor Dynamic Data Exchange (DDE), concepto que Microsoft desarrolló en las primeras versiones de Windows. Mientras DDE fue limitado a transferir una limitada cantidad de información entre dos aplicaciones, OLE fue capaz de mantener enlaces activos entre dos documentos o incluso incrustar un tipo de documento dentro de otro.
Servidores y clientes OLE se comunican con las bibliotecas del sistema usando "Tablas de Funciones Virtuales" (virtual function tables o VTBL). La VTBL es una estructura de funciones de punteros que el sistema de biblioteca puede usar para comunicarse con el cliente o con el servidor. Las bibliotecas del servidor y el cliente OLESVR.DLL y ALECLI.dll, fueron originalmente diseñadas para comunicarse entre ellas usando mensajes Windows WM_DDE_EXECUTE.
Posteriormente, OLE 1.0 se convirtió en una arquitectura para "componentes de software" (software componentry) más conocida como COM y luego DCOM.
Cuando un objeto OLE es colocado en el portapapeles, este es almacenado en formatos nativos de Windows (como son bitmap o metafile), o en su propio formato nativo. Este formato nativo permite a una aplicación OLE encajar una porción de otro documento cortado o copiado en el portapapeles del usuario, almacenándolo en el documento actual.

## OLE 2.0

OLE 2.0 fue la evolución de OLE 1.0, compartiendo muchas de las mismas metas, pero se volvió a implementar basándolo en COM en vez de usar VTBL. Algunas características fueron In-place Activation, OLE Automation y Drag 'n drop.

## ActiveX

En 1996, Microsoft renombró la tecnología OLE 2.0 en ActiveX. Esta versión de OLE es comúnmente usada por diseñadores web para incrustar archivos multimedia.
Como consecuencia de perder en un pleito, la patente con Eolas, Microsoft anunció el 2 de diciembre de 2005, “después de una próxima actualización, los usuarios del Microsoft Internet Explorer no podrán interactuar directamente con los controles de Microsoft ActiveX cargados por medio de APPLET, EMBED, OBJECT. Funcionalmente esto significa que los usuarios del Internet Explorer deberán “activar” objetos como Flash y películas QuickTime antes de que puedan interactuar con ellas. Los objetos todavía se muestran (visualizan), pero el usuario no puede hacer nada con ellos (por ejemplo, pausar una película) hasta que los activen. Cuando los usuarios muevan el cursor sobre uno de estos objetos, una ventana emergente le avisará "haga clic para activar y usar este control". Cuando hagan esto sobre el objeto, podrán usarlos de manera normal. No vale de nada que la patente cubra sólo objetos directamente embebidos en el documento HTML, de esta manera los objetos siguen estando embebidos en las páginas web a través de la ejecución de un pequeño JavaScript que llama a document.write para generar los tags necesarios para incrustar el objeto ActiveX.