stringtranslate.com

Vinculación e incrustación de objetos

Object Linking and Embedding ( OLE ) es una tecnología patentada desarrollada por Microsoft que permite incrustar y vincular 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 implemente la IOleObjectinterfaz, posiblemente junto con una amplia gama de otras interfaces, según 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 podría enviar texto a un procesador de textos o una imagen a un editor de mapas de bits utilizando OLE. [1] 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 hace referencia a él. Esto se llama "vincular" (en lugar de "incrustar").

OLE también se puede utilizar para transferir datos entre diferentes aplicaciones mediante operaciones de arrastrar y soltar o 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 . Mientras que 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 el 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 .

Posteriormente, OLE 1.0 evolucionó hasta convertirse en una arquitectura para componentes de software conocida como Modelo de objetos componentes (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 también 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 Object Packager , un componente de OLE, que se envía desde Windows 3.1 hasta Windows XP, permite "empaquetar" un objeto que no es OLE para que pueda incrustarse 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 sobre COM en lugar de usar VTBL directamente. Las nuevas características fueron la automatización OLE , arrastrar y soltar , activación in situ y almacenamiento estructurado . Los apodos evolucionaron a partir de nombres de objetos OLE 1 y proporcionaron un sistema jerárquico de denominación de objetos y recursos 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 Moniker URL y un esquema de Moniker URL.

Controles personalizados OLE

Los controles personalizados OLE se introdujeron en 1994 como reemplazo de los controles de extensión de Visual Basic , ahora obsoletos . En lugar de actualizarlos, la nueva arquitectura se basó en OLE. En particular, cualquier contenedor que admitiera OLE 2.0 ya podría incorporar 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 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 bajo el tamaño de los archivos de los controles, de modo que se descargaran más rápido; Estos se denominaron entonces 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 visualización 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 por cada objeto contenido.

Lo que sigue es una lista de interfaces, agrupadas por el objeto que normalmente necesita implementarlas. Las interfaces que normalmente implementa el objeto OLE suelen ser invocadas por el contenedor OLE y viceversa. Tenga en cuenta que en la siguiente lista la sangría indica herencia de interfaz. Todas las interfaces sin sangría derivan de IUnknown .

objeto OLE

Objeto de datos
Cuando se implementa, permite la transferencia de datos y la notificación de cambios de datos. Debe implementarse mediante objetos que admitan arrastrar y soltar, copiarlos o pegarlos desde el portapapeles, o vincularlos o incrustarlos en un documento contenedor.
ObjetoConSitio
Permite a la persona que llama informar al objeto OLE de su sitio. OleObject también proporciona esta funcionalidad , pero se puede usar ObjectWithSite , cuando sea compatible, si OleObject no se usa para otros asuntos.
OleCache
Permite almacenar en caché presentaciones visuales de un objeto de datos . Esto permite que un objeto incrustado almacene su representación visual, lo que permite mostrarlo más tarde sin necesidad de iniciar la aplicación que se utilizó para crear el objeto.
Generalmente se utiliza la implementación de acciones.
OleCache2
Proporciona un control más detallado sobre el almacenamiento en caché.
Generalmente se utiliza la implementación de acciones.
OleCacheControl
El contenedor no llama a esta interfaz, sino internamente el objeto para permitirle recibir notificaciones de cuándo se está ejecutando su DataObject , lo que le permite suscribirse a notificaciones de cambios de datos de ese objeto y, por lo tanto, le permite actualizar la presentación en caché correctamente. .
Generalmente se utiliza la implementación de acciones.
OleDocumento
Permite que el objeto OLE admita múltiples vistas de sus datos, así como algunas funciones relacionadas.
OleDocumentoVer
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.
OleVentana
Objeto activo OleInPlace
Lo llama el contenedor más externo de un objeto para interactuar con él mientras está activo, por ejemplo, para procesar claves de aceleración en la cola de mensajes del contenedor que están destinadas al objeto contenido.
Objeto OleInPlace
Llamado por el contenedor para activar o desactivar el objeto.
IOleInPlaceObjectSin ventanas
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 se mueve el mouse 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 .
OleEnlace
Permite que el objeto admita enlaces, por ejemplo, permitiendo que el contenedor establezca el origen de un objeto enlazado.
Generalmente se utiliza la implementación de acciones.
OleObjeto
Posiblemente 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" sobre 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.
Ver objeto
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 suele ser compartida.
VerObjeto2
Además, permite a la persona que llama consultar el tamaño del objeto.
VerObjetoEx
Agrega soporte para dibujar objetos transparentes sin parpadeos, realizar pruebas de impacto para objetos con formas irregulares y establecer el tamaño de un objeto.

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 vista del objeto OLE.
SitioIOleClient
Esta interfaz permite a la persona que llama obtener información sobre el contenedor y la ubicación de un objeto, además de solicitar que el objeto se guarde, cambie de tamaño, se muestre, se oculte, etc.
SitioIoleDocumento
Permite a la persona que llama solicitar que el objeto en este sitio se active inmediatamente. Si se implementa esta interfaz, también se deben implementar IOleClientSite , IOleInPlaceSite e IAdviseSink .
contenedoriole
Esta interfaz permite a la persona que llama enumerar objetos incrustados en un contenedor o buscar dichos objetos por su nombre. Es principalmente útil si el contenedor desea admitir enlaces a objetos incrustados.
VentanaIOle
VentanaIOleInPlaceUI
Permite que los objetos incrustados negocien espacio para las barras de herramientas en la ventana del contenedor.
Marco IOleInPlace
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 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 el lugar, es decir, sin abrirlos en una ventana separada. Proporciona acceso a IOleInPlaceUIWindow del contenedor .
IOleInPlaceSiteEx
Si un contenedor implementa esta interfaz, permite que los objetos incrustados verifiquen si necesitan volver a dibujarse al activarse o desactivarse. También les permite solicitar que se active su interfaz de usuario.
IOleInPlaceSiteSin ventanas
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, permitiendo así que el objeto incrustado se dibuje en la ventana del contenedor.
IOleUILinkContenedor
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 "Enlaces", "Cambiar fuente", "Actualizar enlaces" y "Propiedades del objeto".
IOleUIEnlaceInfo
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 propio 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 notificaciones de cambio de datos se pueden implementar llamando a los métodos de esta interfaz.
Generalmente se utiliza la implementación de acciones.
IOleAdviseHolder
Los métodos de IOleObject que pertenecen a las notificaciones se pueden implementar llamando a los métodos de esta interfaz.
Generalmente se utiliza la implementación de acciones.
IDropFuente
Implementado por objetos que se pueden arrastrar, es decir, que pueden ser el origen 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.
Objetivo de caída
Implementado por objetos que aceptan objetos soltados, es decir, que pueden ser el objetivo de operaciones de arrastrar y soltar. Cuando se implementa, permite al objetivo especificar si se aceptará un objeto descartado y qué sucede con un objeto después de que se descarta.
Objetivo de comando IOle
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 se admiten comandos y ejecutar comandos. 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.
IOleUndoUnidad
Representa una acción que se puede deshacer. Contiene toda la información necesaria para deshacer una acción. Es creado por objetos y contenedores, de modo que se pueden agregar acciones que se pueden deshacer al IOleUndoManager del contenedor .
IOleParentDeshacerUnidad
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 unidades de deshacer. Por ejemplo, si se ejecuta una macro, todas las acciones que se pueden deshacer realizadas por la macro se pueden agrupar en una unidad de deshacer.
VentanaIOle
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 sólido 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, en competencia directa con el estándar OLE propietario de Microsoft. En 1993, algunos competidores de Microsoft establecieron un consorcio llamado Component Integration Laboratories ("CIL") para desarrollar OpenDoc como un estándar abierto para la vinculación e incrustación entre plataformas.

Microsoft exigía la 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 usaban OpenDoc se considerarían compatibles con OLE y recibirían la certificación para Windows 95. Posteriormente, Microsoft revocó la decisión y dijo que las aplicaciones que usaban OpenDoc podrían no recibir ninguna certificación. Microsoft retuvo especificaciones y versiones depuradas de OLE hasta después de haber lanzado sus aplicaciones competidoras.

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). [2] [3] [4] [5] Si no hay software disponible que comprenda un objeto OLE, el objeto generalmente se reemplaza por una imagen (representación de mapa de bits del objeto) o no se muestra en absoluto. [6] [7] [8]

Ver también

Referencias

  1. ^ Este artículo se basa en material tomado de Object+Linking+and+Embedding en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "nueva licencia" de GFDL , versión 1.3 o posterior.
  2. ^ Byfield, Bruce (23 de agosto de 2005). "Comparación de procesadores de texto FOSS: OOo Writer, AbiWord y KWord". Linux.com . La Fundación Linux. Archivado desde el original el 6 de noviembre de 2020 . Consultado el 29 de septiembre de 2020 .
  3. ^ Byfield, Bruce (28 de julio de 2005). "Compartir archivos entre OpenOffice.org y Microsoft Office". Linux.com . La Fundación Linux. Archivado desde el original el 6 de noviembre de 2020 . Consultado el 29 de septiembre de 2020 .
  4. ^ Sharma, Mayank (20 de noviembre de 2008). "SoftMaker Office 2008 se centra en la compatibilidad con Microsoft Office". Linux.com . La Fundación Linux. Archivado desde el original el 6 de noviembre de 2020 . Consultado el 29 de septiembre de 2020 .
  5. ^ Lagadec, Philippe (30 de noviembre de 2006). «OpenOffice/OpenDocument y Microsoft Office 2007/Seguridad Open XML» (PDF) . Conferencia PacSec 2006 . Archivado (PDF) desde el original el 22 de julio de 2011 . Consultado el 29 de septiembre de 2020 .
  6. ^ 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 .
  7. ^ 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 . Archivado desde el original el 31 de diciembre de 2011 . Consultado el 29 de septiembre de 2020 .
  8. ^ "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