Objeto vinculación e incrustación ( OLE ) es una patentada tecnología desarrollada por Microsoft que permite la incrustación y vinculación de documentos y otros objetos. Para los desarrolladores, trajo OLE Control Extension (OCX), una forma de desarrollar y utilizar elementos de interfaz de usuario personalizados. A nivel técnico, un objeto OLE es cualquier objeto que implementa la IOleObject
interfaz, posiblemente junto con una amplia gama de otras interfaces, dependiendo de las necesidades del objeto.
Descripción general
OLE permite que una aplicación de edición exporte parte de un documento a otra aplicación de edición y luego lo importe con contenido adicional. Por ejemplo, un sistema de autoedición puede enviar texto a un procesador de texto o una imagen a un editor de mapas de bits mediante OLE. El principal beneficio de OLE es agregar diferentes tipos de datos a un documento desde diferentes aplicaciones, como un editor de texto y un editor de imágenes. Esto crea un documento de formato binario de archivo compuesto y un archivo maestro al que hace referencia el documento. Los cambios en los datos del archivo maestro afectan inmediatamente al documento que lo hace referencia. Esto se denomina "vinculación" (en lugar de "incrustación").
OLE también se utiliza para transferir datos entre diferentes aplicaciones mediante operaciones de arrastrar y soltar y del portapapeles .
Historia
OLE 1.0
OLE 1.0, lanzado en 1990, fue una evolución del concepto original de intercambio dinámico de datos (DDE) que Microsoft desarrolló para versiones anteriores de Windows . Si bien DDE se limitaba a transferir cantidades limitadas de datos entre dos aplicaciones en ejecución, OLE era capaz de mantener vínculos activos entre dos documentos o incluso incrustar un tipo de documento dentro de otro.
Los servidores y clientes OLE se comunican con las bibliotecas del sistema mediante tablas de funciones virtuales o VTBL. El VTBL consta de una estructura de punteros de función que la biblioteca del sistema puede utilizar para comunicarse con el servidor o cliente. Las bibliotecas de servidor y cliente, OLESVR.DLL y OLECLI.DLL , se diseñaron originalmente para comunicarse entre sí mediante el mensaje WM_DDE_EXECUTE .
Más tarde, OLE 1.0 evolucionó para convertirse en una arquitectura para componentes de software conocida como Component Object Model (COM) y, más tarde, DCOM .
Cuando un objeto OLE se coloca en el portapapeles o se incrusta en un documento, se almacena tanto una representación visual en formatos nativos de Windows (como un mapa de bits o un metarchivo ) como los datos subyacentes en su propio formato. Esto permite que las aplicaciones muestren el objeto sin cargar la aplicación utilizada para crear el objeto, al mismo tiempo que permite editar el objeto, si está instalada la aplicación adecuada.
El Empaquetador de objetos , un componente de OLE, el envío de Windows 3.1 hasta Windows XP permite que un objeto no OLE para ser "empaquetados" por lo que puede ser embebido en un cliente OLE.
OLE 2.0
OLE 2.0 fue la siguiente evolución de OLE, compartiendo muchos de los mismos objetivos que la versión 1.0, pero se volvió a implementar en la parte superior de COM en lugar de utilizar VTBL directamente. Las nuevas características fueron automatización OLE , arrastrar y soltar , activación en el lugar y almacenamiento estructurado . Los monikers evolucionaron a partir de los nombres de objetos OLE 1 y proporcionaron un sistema jerárquico de nombres de recursos y objetos similar a las URL o URI , que se inventaron de forma independiente. Windows ahora ha fusionado las dos tecnologías que admiten un tipo de URL Moniker y un esquema de URL de Moniker.
Controles personalizados OLE
Los controles personalizados OLE se introdujeron en 1994 como reemplazo de los ahora obsoletos controles de Extensión de Visual Basic . En lugar de actualizarlos, la nueva arquitectura se basó en OLE. En particular, cualquier contenedor que admita OLE 2.0 ya podría incrustar controles personalizados OLE, aunque estos controles no pueden reaccionar a eventos a menos que el contenedor lo admita. Los controles personalizados OLE generalmente se envían en forma de una biblioteca de vínculos dinámicos con la extensión .ocx. En 1996, todas las interfaces para controles (excepto IUnknown) se hicieron opcionales para mantener el tamaño de archivo de los controles bajo, de modo que se descargaran más rápido; estos luego se llamaron Controles ActiveX .
Detalles técnicos
Los objetos y contenedores OLE se implementan sobre el modelo de objetos componentes ; son objetos que pueden implementar interfaces para exportar su funcionalidad. Solo la interfaz IOleObject es obligatoria, pero es posible que también sea necesario implementar otras interfaces si se requiere la funcionalidad exportada por esas interfaces.
Para facilitar la comprensión de lo que sigue, es necesario explicar cierta terminología. El estado de vista de un objeto es si el objeto es transparente, opaco u opaco con un fondo sólido y si admite dibujos con un aspecto específico. El sitio de un objeto es un objeto que representa la ubicación del objeto en su contenedor. Un contenedor admite un objeto de sitio para cada objeto contenido.
Lo que sigue es una lista de interfaces, agrupadas por el objeto que normalmente necesita implementarlas. Las interfaces generalmente implementadas por el objeto OLE generalmente son llamadas por el contenedor OLE y viceversa. Tenga en cuenta que en la siguiente lista la sangría indica la herencia de la interfaz. Todas las interfaces sin sangría se derivan de IUnknown .
Objeto OLE
- Objeto de datos
- Cuando se implementa, habilita la transferencia de datos y la notificación de cambios de datos. Debe ser implementado por objetos que admitan la función de arrastrar y soltar, que se copien o peguen desde el portapapeles, o que se vinculen o incrusten en un documento contenedor.
- ObjectWithSite
- Permite a la persona que llama informar al objeto OLE de su sitio. OleObject también proporciona esta funcionalidad , pero ObjectWithSite se puede usar, cuando se admite, si OleObject no se usa para otros asuntos.
- OleCache
- Permite que las presentaciones visuales de un DataObject se almacenen en caché. Esto permite que un objeto incrustado almacene su representación visual, lo que permite que se muestre más tarde sin necesidad de iniciar la aplicación que se utilizó para crear el objeto.
- Normalmente se utiliza la implementación de stock.
- OleCache2
- Proporciona un control más detallado sobre el almacenamiento en caché.
- Normalmente se utiliza la implementación de stock.
- OleCacheControl
- Esta interfaz no es llamada por el contenedor, sino internamente por el objeto para permitirle recibir notificaciones de cuando su DataObject se está ejecutando, lo que le permite suscribirse a notificaciones de cambios de datos de ese objeto y así actualizar la presentación en caché correctamente. .
- Normalmente se utiliza la implementación de stock.
- OleDocument
- Permite que el objeto OLE admita múltiples vistas de sus datos, así como algunas funciones relacionadas.
- OleDocumentView
- Un objeto de documento (un objeto que implementa OleDocument ) implementa esta interfaz para cada vista. Permite a la persona que llama establecer el sitio del objeto, consultar y establecer el tamaño del objeto y mostrarlo y activarlo, así como algunas funciones relacionadas.
- OleWindow
- OleInPlaceActiveObject
- Lo llama el contenedor más externo de un objeto para interactuar con él mientras está activo, por ejemplo, para procesar las teclas de aceleración en la cola de mensajes del contenedor que están destinadas al objeto contenido.
- OleInPlaceObject
- Llamado por el contenedor para activar o desactivar el objeto.
- IOleInPlaceObjectWindowless
- Un objeto sin ventana es un objeto que no tiene su propia ventana, sino que se muestra en la ventana de su contenedor. El contenedor lo utiliza para transmitir mensajes recibidos por la ventana del contenedor que están destinados al objeto contenido. Por ejemplo, si el mouse se mueve sobre una ventana, Windows coloca un mensaje de movimiento del mouse junto con las coordenadas del mouse en la cola de mensajes de la ventana. Si esta ventana contiene objetos incrustados sin ventanas, es posible que el mensaje deba transmitirse a dicho objeto si las coordenadas del puntero del mouse están sobre este objeto. Por razones similares, esta interfaz también proporciona acceso a la interfaz DropTarget del objeto .
- OleLink
- Permite que el objeto admita la vinculación, por ejemplo, permitiendo que el contenedor establezca la fuente de un objeto vinculado.
- Normalmente se utiliza la implementación de stock.
- Objeto OLE
- Podría decirse que es la interfaz más importante para un objeto OLE. Por ejemplo, permite al contenedor informar al objeto de su sitio, inicializar el objeto a partir de datos, abrirlo y cerrarlo, consultar y establecer el tamaño del objeto, solicitar notificaciones en el AdviseSink del contenedor y ejecutar objetos definidos. como "verbos" en el objeto. Estos verbos suelen incluir "Abrir" o "Editar", pero también pueden incluir otros verbos. Uno de los verbos se define como el verbo principal y se ejecuta cuando el usuario hace doble clic en un objeto.
- ViewObject
- Permite que un objeto se dibuje a sí mismo directamente, sin pasar un DataObject al contenedor. Para los objetos que admiten tanto DataObject como esta interfaz, la implementación subyacente generalmente se comparte.
Contenedor OLE
- IAdviseSink
- Permite al implementador recibir notificaciones cuando el objeto se guarda, cierra o cambia de nombre, o cuando cambian sus datos o presentación visual.
- IAdviseSink2
- Además, permite al implementador recibir notificaciones cuando cambia el origen del enlace del objeto OLE.
- IAdviseSinkEx
- Además, permite al implementador recibir notificaciones cuando cambia el estado de la vista del objeto OLE.
- IOleClientSite
- Esta interfaz permite a la persona que llama obtener información sobre el contenedor y la ubicación de un objeto, así como solicitar que el objeto sea guardado, redimensionado, mostrado, oculto, etc.
- IOleDocumentSite
- Permite a la persona que llama solicitar que el objeto de este sitio se active inmediatamente. Si se implementa esta interfaz, también se deben implementar IOleClientSite , IOleInPlaceSite e IAdviseSink .
- IOleContainer
- Esta interfaz permite a la persona que llama enumerar los objetos incrustados en un contenedor o encontrar dichos objetos por su nombre. Es principalmente útil si el contenedor desea admitir enlaces a objetos incrustados.
- IOleWindow
- IOleInPlaceUIWindow
- Permite que los objetos incrustados negocien el espacio para las barras de herramientas en la ventana del contenedor.
- IOleInPlaceFrame
- Permite a la persona que llama pedirle al contenedor que inserte sus elementos de menú en un menú vacío que se convertirá en el menú cooperativo. También permite a la persona que llama pedirle al contenedor que muestre u oculte este menú, que muestre u oculte los cuadros de diálogo y que procese las teclas de aceleración recibidas por el objeto contenido destinado al contenedor.
- IOleInPlaceSite
- Si un contenedor implementa esta interfaz, permite que los objetos incrustados se activen en su lugar, es decir, sin abrir una ventana separada. Proporciona acceso a IOleInPlaceUIWindow del contenedor .
- IOleInPlaceSiteEx
- Si un contenedor implementa esta interfaz, permite que los objetos incrustados comprueben si necesitan volver a dibujar al activarse o desactivarse. También les permite solicitar que se active su interfaz de usuario.
- IOleInPlaceSiteWindowless
- Si un contenedor desea admitir objetos incrustados sin ventanas, debe proporcionar funcionalidad a los objetos incrustados para reemplazar la funcionalidad que normalmente proporciona la ventana de un objeto incrustado. Por ejemplo, esta interfaz proporciona una forma de acceder al contexto del dispositivo de la ventana del contenedor, lo que permite que el objeto incrustado se dibuje en la ventana del contenedor.
- IOleUILinkContainer
- Contiene los métodos que utilizan los cuadros de diálogo OLE estándar que administran objetos vinculados para actualizar objetos vinculados en un contenedor o para consultar y cambiar sus orígenes. Utilizado por los cuadros de diálogo "Vínculos", "Cambiar fuente", "Actualizar vínculos" y "Propiedades de objeto".
- IOleUILinkInfo
- Además, permite que los cuadros de diálogo consulten cuándo se actualizaron por última vez los objetos vinculados y si esto se hizo de forma automática o manual.
- IOleUIObjInfo
- Contiene los métodos necesarios para el cuadro de diálogo "Propiedades del objeto". Por ejemplo, si el usuario abre el cuadro de diálogo "Propiedades del objeto" y solicita que el objeto se convierta a otro tipo, se llama a un método en esta interfaz.
- IOleUndoManager
- Proporciona un servicio de deshacer centralizado tanto para el contenedor como para los objetos incrustados. Cuando se realiza una acción que se puede deshacer, se crea una IOleUndoUnit y se agrega a IOleUndoManager
Otro
- IDataAdviseHolder
- Los métodos de IDataObject que pertenecen a las notificaciones de cambio de datos se pueden implementar llamando a los métodos de esta interfaz.
- Normalmente se utiliza la implementación de stock.
- IOleAdviseHolder
- Los métodos de IOleObject que pertenecen a las notificaciones se pueden implementar llamando a los métodos de esta interfaz.
- Normalmente se utiliza la implementación de stock.
- IDropSource
- Implementado por objetos que se pueden arrastrar, es decir, que pueden ser la fuente de operaciones de arrastrar y soltar. Cuando se implementa, permite que el objeto dibuje efectos de arrastrar y soltar y especificar cuándo se suelta el objeto o se cancela la operación de arrastrar y soltar.
- IDropTarget
- Implementado por objetos que aceptan objetos soltados, es decir, que pueden ser el objetivo de operaciones de arrastrar y soltar. Cuando se implementa, permite que el objetivo especifique si se aceptará un objeto eliminado y qué le sucede a un objeto después de que se elimine.
- IOleCommandTarget
- Puede ser implementado por objetos (objetos OLE, contenedores OLE y otros objetos) que deseen admitir ciertos comandos estándar. Permite a las personas que llaman consultar si los comandos son compatibles y ejecutarlos. Los comandos que un objeto normalmente desea implementar pueden incluir cosas como "eliminar", "cortar", "copiar", "pegar", "deshacer", "buscar", "imprimir", "guardar", "hacer zoom" y pronto. Actualmente se han definido 58 comandos estándar, que incluyen comandos comúnmente utilizados por software de oficina, navegadores web y aplicaciones similares.
- IOleUndoUnit
- Representa una acción que se puede deshacer. Contiene toda la información necesaria para deshacer una acción. Se crea mediante objetos y contenedores, por lo que las acciones que se pueden deshacer se pueden agregar al IOleUndoManager del contenedor .
- IOleParentUndoUnit
- Permite que una unidad de deshacer contenga otras unidades de deshacer. En esencia, esto permite que la unidad de deshacer actúe como una pila de deshacer, agrupando las unidades de deshacer juntas. Por ejemplo, si se ejecuta una macro, todas las acciones que se pueden deshacer realizadas por la macro pueden agruparse en una unidad de deshacer.
- IOleWindow
- Esta interfaz representa una ventana de un contenedor u objeto contenido. Permite a las personas que llaman obtener el identificador de la ventana y alternar la función de ayuda sensible al contexto. Cuando la función de ayuda sensible al contexto está activada, normalmente el puntero del mouse cambia a una flecha con un signo de interrogación para indicar que al hacer clic en un elemento de la interfaz de usuario se abrirá una ventana de ayuda.
Competencia
La tecnología OpenDoc intentó competir con OLE. Algunos de los competidores de Microsoft consideraban que OpenDoc era más robusto y más fácil de usar; sin embargo, OpenDoc tiene algunos problemas conocidos . OpenDoc permitió a los usuarios ver y editar información entre aplicaciones, directamente en competencia con el estándar OLE patentado de Microsoft. En 1993, algunos competidores de Microsoft establecieron un consorcio llamado Laboratorios de Integración de Componentes ("CIL") para desarrollar OpenDoc como un estándar abierto para la vinculación e incrustación multiplataforma.
Microsoft requería compatibilidad OLE como condición para la certificación de Microsoft de la compatibilidad de una aplicación con Windows 95 . Microsoft anunció inicialmente que las aplicaciones que usan OpenDoc se considerarían compatibles con OLE y recibirían la certificación para Windows 95. Más tarde, Microsoft revocó la decisión y dijo que las aplicaciones que usan OpenDoc podrían no recibir ninguna certificación. Microsoft retuvo especificaciones y depuró versiones de OLE hasta después de haber lanzado sus aplicaciones de la competencia.
Interoperabilidad
El uso de objetos OLE limita la interoperabilidad, porque estos objetos no son ampliamente compatibles con programas para ver o editar archivos fuera de Microsoft Windows (por ejemplo, incrustar otros archivos dentro del archivo, como tablas o gráficos de una aplicación de hoja de cálculo en un documento de texto o archivo de presentación). [1] [2] [3] [4] Si el software que comprende un objeto OLE no está disponible, el objeto generalmente se reemplaza por una imagen (representación de mapa de bits del objeto) o no se muestra en absoluto. [5] [6] [7]
Ver también
- Automatización OLE
- OLE para control de procesos (OPC)
- Modelo de objetos componentes (COM)
- Modelo de objetos componentes distribuidos (DCOM)
- Intercambio dinámico de datos (DDE)
- Tipo de medio de Internet
- Extensiones multipropósito de correo de Internet (MIME)
- Shscrap.dll (archivos de desecho de shell)
Referencias
- ↑ Byfield, Bruce (23 de agosto de 2005). "Procesadores de texto FOSS comparados: OOo Writer, AbiWord y KWord" . Linux.com . La Fundación Linux . Consultado el 29 de septiembre de 2020 .
- ^ Byfield, Bruce (28 de julio de 2005). "Compartir archivos entre OpenOffice.org y Microsoft Office" . Linux.com . La Fundación Linux . Consultado el 29 de septiembre de 2020 .
- ^ Sharma, Mayank (20 de noviembre de 2008). "SoftMaker Office 2008 se centra en la compatibilidad con Microsoft Office" . Linux.com . La Fundación Linux . Consultado el 29 de septiembre de 2020 .
- ^ Lagadec, Philippe (30 de noviembre de 2006). "Seguridad OpenOffice / OpenDocument y Microsoft Office 2007 / Open XML" (PDF) . Conferencia PacSec 2006 . Consultado el 29 de septiembre de 2020 .
- ^ Gong, Rhett (5 de septiembre de 2005). "RE: Objeto OLE - ¿Representación de mapa de bits?" . Grupo de noticias : microsoft.public.win32.programmer.ole . Usenet: [email protected] . Consultado el 29 de septiembre de 2020 .
- ^ O'Neill, Mike (9 de febrero de 2005). "Un control de edición enriquecido que muestra mapas de bits y otros objetos OLE" . Proyecto de código . Consultado el 29 de septiembre de 2020 .
- ^ "ACC: Por qué los objetos OLE hacen que las bases de datos crezcan" . Microsoft . 2007-01-19. Archivado desde el original el 15 de febrero de 2008.
enlaces externos
- ripOLE : extrae archivos adjuntos de documentos OLE
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.