Связывание и внедрение объектов

редактировать
Технология, разработанная Microsoft

Связывание и внедрение объектов (OLE ) - это собственная технология, разработанная Microsoft, которая позволяет встраивать и связывать с документами и другими объектами. Для разработчиков он предоставил OLE Control Extension (OCX), способ разработки и использования настраиваемых элементов пользовательского интерфейса. На техническом уровне объект OLE - это любой объект, реализующий интерфейс IOleObject, возможно, вместе с широким спектром других интерфейсов, в зависимости от потребностей объекта.

Содержание
  • 1 Обзор
  • 2 История
    • 2.1 OLE 1.0
    • 2.2 OLE 2.0
    • 2.3 Пользовательские элементы управления OLE
  • 3 Технические детали
    • 3.1 Объект OLE
    • 3.2 OLE контейнер
    • 3.3 Другое
  • 4 Конкурс
  • 5 Взаимодействие
  • 6 См. также
  • 7 Ссылки
  • 8 Внешние ссылки
Обзор

OLE позволяет редактировать приложение для экспорта часть документа в другое приложение для редактирования , а затем импортировать ее с дополнительным содержимым. Например, система настольных издательских систем может отправить текст в текстовый процессор или изображение в OLE. Основным преимуществом OLE является добавление в документ различных типов данных из разных приложений, таких как текстовый редактор и редактор изображений. Это создает документ составного файла в двоичном формате и главный файл, на который имеется ссылка в документе. Изменения данных в главном файле немедленно влияют на документ, который на него ссылается. Это называется «связывание» (вместо «встраивания»).

OLE также используется для передачи данных между различными приложениями с помощью операций перетаскивания и буфера обмена.

История

OLE 1.0

OLE 1.0, выпущенная в 1990 году, была развитием исходной концепции динамического обмена данными (DDE), которая Microsoft разработан для более ранних версий Windows. В то время как DDE был ограничен передачей ограниченных объемов данных между двумя запущенными приложениями, OLE могла поддерживать активные связи между двумя документами или даже встраивать один тип документа в другой.

Серверы и клиенты OLE взаимодействуют с системными библиотеками с помощью таблиц виртуальных функций или VTBL. VTBL состоит из структуры указателей функций, которые системная библиотека может использовать для связи с сервером или клиентом. Серверная и клиентская библиотеки, OLESVR.DLLи OLECLI.DLL, изначально были разработаны для связи между собой с помощью сообщения WM_DDE_EXECUTE.

OLE 1.0 позже превратился в архитектуру для программных компонентов, известную как Component Object Model (COM), а позже DCOM.

Когда Объект OLE помещается в буфер обмена или внедряется в документ, сохраняется как визуальное представление в собственных форматах Windows (например, bitmap или метафайл ), так и лежащие в основе данные в собственном формате. Это позволяет приложениям отображать объект без загрузки приложения, использованного для создания объекта, а также позволяет редактировать объект, если соответствующее приложение установлено.

Object Packager, компонент OLE, поставляемый с Windows 3.1 до Windows XP, позволяет "объекту, не относящемуся к OLE" быть " упакован », чтобы его можно было встроить в OLE-клиент.

OLE 2.0

OLE 2.0 был следующим этапом эволюции OLE, преследуя те же цели, что и версия 1.0, но был повторно реализован поверх COM вместо прямого использования VTBL. Новыми функциями были автоматизация OLE, перетаскивание и структурированное хранилище. Моникеры произошли от имен объектов OLE 1 и предоставили иерархическую систему именования объектов и ресурсов, аналогичную URL-адресам или URI, которые были изобретены независимо. Теперь Windows объединила две технологии, поддерживающие тип URL Moniker и схему URL Moniker.

Пользовательские элементы управления OLE

Пользовательские элементы управления OLE были представлены в 1994 году как замена устаревшим элементам управления Visual Basic Extension. Вместо их обновления новая архитектура была основана на OLE. В частности, любой контейнер, поддерживающий OLE 2.0, уже может встраивать настраиваемые элементы управления OLE, хотя эти элементы управления не могут реагировать на события, если контейнер не поддерживает это. Пользовательские элементы управления OLE обычно поставляются в виде библиотеки динамической компоновки с расширением.ocx. В 1996 году все интерфейсы для элементов управления (кроме IUnknown) стали необязательными, чтобы уменьшить размер файлов элементов управления, чтобы они загружались быстрее; затем они были названы Элементы управления ActiveX.

Технические детали

Объекты и контейнеры OLE реализованы поверх модели компонентных объектов ; это объекты, которые могут реализовывать интерфейсы для экспорта своей функциональности. Обязательным является только интерфейс IOleObject, но могут потребоваться и другие интерфейсы, если требуется функциональность, экспортируемая этими интерфейсами.

Чтобы облегчить понимание того, что следует, необходимо пояснить некоторую терминологию. Статус просмотра объекта - это то, является ли объект прозрачным, непрозрачным или непрозрачным со сплошным фоном, а также поддерживает ли он рисование с указанным аспектом. Местом расположения объекта является объект, представляющий расположение объекта в его контейнере. Контейнер поддерживает объект сайта для каждого содержащегося объекта.

Далее следует список интерфейсов, сгруппированных по объектам, которые обычно нуждаются в их реализации. Интерфейсы, обычно реализуемые объектом OLE, обычно вызываются контейнером OLE, и наоборот. Обратите внимание, что отступ в следующем списке указывает на наследование интерфейса. Все интерфейсы без отступа являются производными от IUnknown.

OLE-объекта

DataObject
При реализации позволяет передавать данные и уведомлять об изменениях данных. Он должен быть реализован объектами, которые должны поддерживать перетаскивание, копироваться или вставляться из буфера обмена, или быть связаны или встроены в содержащий документ.
ObjectWithSite
Позволяет вызывающий, чтобы сообщить объекту OLE о своем сайте. Эта функция также обеспечивается OleObject, но ObjectWithSite может использоваться, если поддерживается, если OleObject не используется для других целей.
OleCache
Позволяет кэшировать визуальные презентации из DataObject . Это позволяет встроенному объекту сохранять свое визуальное представление, таким образом, позволяя отображать его позже без необходимости запуска приложения, которое использовалось для создания объекта.
Обычно используется стандартная реализация.
OleCache2
Обеспечивает более детальный контроль над кешированием.
Обычно используется стандартная реализация.
OleCacheControl
Этот интерфейс не вызывается контейнером, но внутри объекта, чтобы позволить ему получать уведомления о том, когда его DataObject работает, тем самым позволяя ему подписаться на уведомления об изменении данных этого объекта и, таким образом, позволяя ему обновлять кешированное представление
Обычно используется стандартная реализация.
OleDocument
Позволяет объекту OLE поддерживать несколько представлений своих данных, а также несколько связанных функций.
OleDocumentView
Объект документа (объект, реализующий OleDocument ) реализует этот интерфейс для каждого представления. Он позволяет вызывающему абоненту установить местоположение объекта, запросить и установить размер объекта, а также показать и активировать его, а также некоторые связанные функции.
OleWindow
OleInPlaceActiveObject
Вызывается внешним контейнером объекта для взаимодействия с ним, пока он активен, например для обработки клавиш-ускорителей в очереди сообщений контейнера, которые предназначены для содержащегося в нем объекта.
OleInPlaceObject
Вызывается контейнером для активации или деактивации объекта.
IOleInPlaceObjectWindowless
Объект без окон - это объект, который не имеет собственного окна, но вместо этого отображается в окне своего контейнера. Он используется контейнером для ретрансляции сообщений, полученных окном контейнера, которые предназначены для содержащегося в нем объекта. Например, если мышь перемещается по окну, Windows помещает сообщение о перемещении мыши вместе с координатами мыши в очередь сообщений окна. Если это окно содержит внедренные объекты без окон, сообщение может быть передано такому объекту, если координаты указателя мыши находятся над этим объектом. По тем же причинам этот интерфейс также предоставляет доступ к интерфейсу объекта DropTarget.
OleLink
Позволяет объекту поддерживать связывание, например позволяя контейнеру устанавливать источник связанного объекта.
Обычно используется стандартная реализация.
OleObject
Возможно, наиболее важный интерфейс для объекта OLE. Например, он позволяет контейнеру информировать объект о своем сайте, инициализировать объект на основе данных, открывать и закрывать его, запрашивать и устанавливать размер объекта, запрашивать уведомления на AdviseSink <91 контейнера.>и выполнять объекты, определенные как «глаголы» на объекте. Эти глаголы часто включают «Открыть» или «Изменить», но могут также включать и другие глаголы. Один из глаголов определяется как главный глагол, и он выполняется, когда пользователь дважды щелкает объект.
ViewObject
Позволяет объекту рисовать себя напрямую, без передачи DataObject в контейнер. Для объектов, которые поддерживают и DataObject, и этот интерфейс, обычно используется общая реализация базовой реализации.
ViewObject2
Дополнительно позволяет вызывающей стороне запрашивать размер объекта.
ViewObjectEx
Добавляет поддержку рисования прозрачных объектов без мерцания, проверки попадания для объектов неправильной формы и установки размера объекта.

OLE container

IAdviseSink
Позволяет разработчику получать уведомления при сохранении, закрытии или переименовании объекта, а также при изменении его данных или визуального представления.
IAdviseSink2
Дополнительно позволяет разработчику получать уведомления при изменении источника ссылки объекта OLE.
IAdviseSinkEx
Дополнительно позволяет разработчику получать уведомления при изменении статуса просмотра объекта OLE.
IOleClientSite
Этот интерфейс позволяет вызывающему абоненту получать информацию о контейнере и местоположении объекта, а также запрашивать сохранение, изменение размера, отображение объекта, скрытый и т. д.
IOleDocumentSite
Позволяет вызывающему абоненту немедленно запросить активацию объекта на этом сайте. Если этот интерфейс реализован, также должны быть реализованы IOleClientSite, IOleInPlaceSite и IAdviseSink .
IOleContainer
Этот интерфейс позволяет вызывающей стороне перечислять встроенные объекты в контейнере или находить такие объекты по имени. Это в первую очередь полезно, если контейнер хочет поддерживать ссылки на встроенные объекты.
IOleWindow
IOleInPlaceUIWindow
Позволяет встроенным объектам согласовывать пространство для панелей инструментов в окне контейнера.
IOleInPlaceFrame
Позволяет вызывающей стороне попросить контейнер вставить свои пункты меню в пустое меню, которое станет совместным меню. Также позволяет вызывающему объекту запрашивать у контейнера отображение или скрытие этого меню, отображение или скрытие диалоговых окон и обработку клавиш-ускорителей, полученных содержащимся объектом, предназначенным для контейнера.
IOleInPlaceSite
Если контейнер реализует этот интерфейс, он позволяет активировать встроенные объекты на месте, т. е. без открытия в отдельном окне. Он обеспечивает доступ к IOleInPlaceUIWindow.
IOleInPlaceSiteEx
контейнера. Если контейнер реализует этот интерфейс, он позволяет встроенным объектам проверять, нужно ли им перерисовывать при активации или деактивации. Это также позволяет им запрашивать активацию пользовательского интерфейса.
IOleInPlaceSiteWindowless
Если контейнер желает поддерживать внедренные объекты без окон, он должен предоставить функциональность встроенным объектам, чтобы заменить функциональность, обычно предоставляемую окном внедренного объекта. Например, этот интерфейс предоставляет способ доступа к контексту устройства окна контейнера, тем самым позволяя встроенному объекту рисовать в окне контейнера.
IOleUILinkContainer
Содержит методы, которые стандартные диалоговые окна OLE, управляющие связанными объектами используйте для обновления связанных объектов в контейнере или для запроса и изменения их источников. Используется диалоговыми окнами «Ссылки», «Изменить источник», «Обновить ссылки» и «Свойства объекта».
IOleUILinkInfo
Дополнительно позволяет диалоговым окнам запрашивать, когда в последний раз обновлялись связанные объекты, и было ли это сделано автоматически или вручную.
IOleUIObjInfo
Содержит методы, необходимые для диалогового окна «Свойства объекта». Например, если пользователь открывает диалоговое окно «Свойства объекта» и просит преобразовать объект в другой тип, вызывается метод в этом интерфейсе.
IOleUndoManager
Предоставляет централизованную службу отмены для обоих сам контейнер и встроенные объекты. Когда выполняется отменяемое действие, создается IOleUndoUnit и добавляется в IOleUndoManager

Other

IDataAdviseHolder
Методы IDataObject, которые относящиеся к уведомлениям об изменении данных могут быть реализованы путем вызова методов этого интерфейса.
Обычно используется стандартная реализация.
IOleAdviseHolder
Методы IOleObject, относящиеся к уведомлениям, могут быть реализованы путем вызова методов этого интерфейса.
Обычно используется стандартная реализация.
IDropSource
Реализуется объектами, которые можно перетаскивать, т.е. он может быть источником операций перетаскивания. Когда он реализован, он позволяет объекту рисовать эффекты перетаскивания и указывать, когда объект отбрасывается или операция перетаскивания отменяется.
IDropTarget
Реализовано с помощью объекты, которые принимают отброшенные объекты, т. е. могут быть целью операций перетаскивания. Когда он реализован, он позволяет цели указать, будет ли принят отброшенный объект, и что произойдет с объектом после его удаления.
IOleCommandTarget
Может быть реализовано объектами (объектами OLE, OLE контейнеры и другие объекты), которые хотят поддерживать определенные стандартные команды. Он позволяет вызывающим абонентам запрашивать, поддерживаются ли команды, и выполнять команды. Команды, которые объект обычно может захотеть реализовать, могут включать такие вещи, как «удалить», «вырезать», «скопировать», «вставить», «отменить», «найти», «напечатать», «сохранить», «увеличить» и скоро. В настоящее время определено 58 стандартных команд, включая команды, обычно используемые офисным программным обеспечением, веб-браузерами и аналогичными приложениями.
IOleUndoUnit
Представляет действие, которое можно отменить. Он содержит всю информацию, необходимую для отмены действия. Он создается объектами и контейнерами, так что отменяемые действия могут быть добавлены в контейнер IOleUndoManager.
IOleParentUndoUnit
Позволяет блоку отмены содержать другие блоки отмены. По сути, это позволяет юниту отмены действовать как стек отмены, группируя юниты отмены вместе. Например, если запускается макрос, все отменяемые действия, выполняемые макросом, могут быть сгруппированы в один блок отмены.
IOleWindow
Этот интерфейс представляет окно контейнера или содержащегося объекта. Это позволяет вызывающим абонентам получать дескриптор окна и переключать функцию контекстно-зависимой справки. Когда функция контекстно-зависимой справки включена, указатель мыши обычно изменяется на стрелку со знаком вопроса, чтобы указать, что щелчок по элементу пользовательского интерфейса приведет к открытию окна справки.
Competition

OpenDoc Технологии пытались составить конкуренцию OLE. Некоторые конкуренты Microsoft считали OpenDoc более надежным и простым в использовании; однако OpenDoc имеет некоторые известные проблемы. OpenDoc позволял пользователям просматривать и редактировать информацию в приложениях, прямо конкурируя с проприетарным стандартом OLE от Microsoft. В 1993 году некоторые конкуренты Microsoft создали консорциум под названием Component Integration Laboratories («CIL») для разработки OpenDoc как открытого стандарта для межплатформенного связывания и встраивания.

Microsoft требовала совместимости с OLE в качестве условия сертификации Microsoft совместимости приложения с Windows 95. Изначально Microsoft объявила, что приложения, использующие OpenDoc, будут считаться совместимыми с OLE и получат сертификацию для Windows 95. Позже Microsoft отменила это решение и заявила, что приложения, использующие OpenDoc, могут вообще не проходить сертификацию. Microsoft не раскрывала спецификации и отлаженные версии OLE до тех пор, пока не выпустила свои конкурирующие приложения.

Взаимодействие

Использование объектов OLE ограничивает взаимодействие, поскольку эти объекты не широко поддерживаются в программах для просмотра или редактирования файлов вне Microsoft Windows (например, встраивание других файлов в файл, таких как в виде таблиц или диаграмм из приложения для работы с электронными таблицами в текстовом документе или файле презентации). Если программное обеспечение, которое понимает объект OLE, недоступно, объект обычно заменяется изображением (растровое представление объекта) или не отображается вообще.

См. Также
Ссылки
Внешние ссылки
  • ripOLE - извлекает вложения из документов OLE

Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.

Последняя правка сделана 2021-06-01 07:22:23
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте