Технология, разработанная 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 или новее.