Jump to content

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

OLE-объект

[ редактировать ]
Объект данных
При реализации обеспечивает передачу данных и уведомление об изменении данных. Он должен быть реализован с помощью объектов, которые должны поддерживать перетаскивание, копирование или вставку из буфера обмена, а также связывание или внедрение в содержащий документ.
ОбъектВиссите
Позволяет вызывающей стороне сообщить объекту OLE о своем сайте. Эту функциональность также предоставляет OleObject , но ObjectWithSite можно использовать , если он поддерживается, если OleObject не используется для других целей.
ОлеКэш
визуальные презентации из DataObject Позволяет кэшировать . Это позволяет встроенному объекту сохранять свое визуальное представление, что позволяет отображать его позже без необходимости запуска приложения, которое использовалось для создания объекта.
Обычно используется стоковая реализация.
ОлеКэш2
Обеспечивает более детальный контроль над кэшированием.
Обычно используется стоковая реализация.
Олекэшконтрол
Этот интерфейс вызывается не контейнером, а внутри объекта, чтобы позволить ему получать уведомления о том, когда его DataObject запущен, тем самым позволяя ему подписаться на уведомления об изменениях данных этого объекта и, таким образом, позволяя ему правильно обновлять кэшированное представление. .
Обычно используется стоковая реализация.
ОлеДокумент
Позволяет объекту OLE поддерживать несколько представлений своих данных, а также несколько связанных функций.
ОлеДокументВью
Объект документа (объект, реализующий OleDocument ) реализует этот интерфейс для каждого представления. Он позволяет вызывающему абоненту устанавливать местоположение объекта, запрашивать и устанавливать размер объекта, а также показывать и активировать его, а также выполнять некоторые связанные функции.
ОлеОкно
Олеинплацеактивеобжект
Вызывается самым внешним контейнером объекта для взаимодействия с ним, пока он активен, например, для обработки сочетаний клавиш в очереди сообщений контейнера, предназначенных для содержащегося объекта.
ОлеИнПлейсОбъект
Вызывается контейнером для активации или деактивации объекта.
IOleInPlaceObjectWindowless
Объект без окон — это объект, который не имеет собственного окна, но вместо этого отображается в окне своего контейнера. Он используется контейнером для ретрансляции сообщений, полученных окном контейнера и предназначенных для содержащегося объекта. Например, если мышь наведена на окно, Windows помещает сообщение о перемещении мыши вместе с координатами мыши в очередь сообщений окна. Если это окно содержит встроенные объекты без окон, возможно, сообщение придется передать такому объекту, если координаты указателя мыши находятся над этим объектом. объекта По тем же причинам этот интерфейс также обеспечивает доступ к интерфейсу DropTarget .
ОлеЛинк
Позволяет объекту поддерживать связывание, например, позволяя контейнеру устанавливать источник связанного объекта.
Обычно используется стоковая реализация.
ОлеОбъект
Возможно, самый важный интерфейс для объекта OLE. Например, он позволяет контейнеру сообщать объекту о своем сайте, инициализировать объект на основе данных, открывать и закрывать его, запрашивать и устанавливать размер объекта, запрашивать уведомления на AdviseSink контейнера и выполнять определенные объекты. как «глаголы» на объекте. Эти глаголы часто включают «Открыть» или «Редактировать», но могут также включать и другие глаголы. Один из глаголов определен как основной и выполняется, когда пользователь дважды щелкает объект.
ПросмотрОбъекта
Позволяет объекту рисовать себя напрямую, без передачи DataObject в контейнер. Для объектов, которые поддерживают как DataObject , так и этот интерфейс, базовая реализация обычно является общей.
ПросмотрОбъект2
Дополнительно позволяет вызывающему объекту запрашивать размер объекта.
ВьюОбжектекс
Добавляет поддержку рисования прозрачных объектов без мерцания, проверки попадания объектов неправильной формы и установки размера объекта.

OLE-контейнер

[ редактировать ]
IAdviseSink
Позволяет разработчику получать уведомления при сохранении, закрытии или переименовании объекта, а также при изменении его данных или визуального представления.
IAdviseSink2
Кроме того, позволяет разработчику получать уведомления при изменении источника ссылки объекта OLE.
IAdviseSinkEx
Кроме того, позволяет разработчику получать уведомления при изменении состояния просмотра объекта OLE.
Иолеклиентсайт
Этот интерфейс позволяет вызывающему объекту получать информацию о контейнере и местонахождении объекта, а также запрашивать сохранение, изменение размера, отображение, скрытие объекта и т. д.
IOleDocumentSite
Позволяет вызывающему абоненту запросить немедленную активацию объекта на этом сайте. Если этот интерфейс реализован, IOleClientSite , IOleInPlaceSite и IAdviseSink . также должны быть реализованы
Иолеконтейнер
Этот интерфейс позволяет вызывающей стороне перечислять встроенные объекты в контейнере или находить такие объекты по имени. Это в первую очередь полезно, если контейнер хочет поддерживать ссылки на встроенные объекты.
IOleWindow
IOleInPlaceUIWindow
Позволяет внедренным объектам согласовывать место для панелей инструментов в окне контейнера.
IOleInPlaceFrame
Позволяет вызывающему объекту попросить контейнер вставить его пункты меню в пустое меню, которое станет совместным меню. Также позволяет вызывающему объекту попросить контейнер показать или скрыть это меню, показать или скрыть диалоговые окна, а также обрабатывать клавиши быстрого доступа, полученные содержащимся в нем объектом, предназначенным для контейнера.
IOleInPlaceSite
Если контейнер реализует этот интерфейс, он позволяет активировать встроенные объекты на месте, т.е. не открывая их в отдельном окне. контейнера Он обеспечивает доступ к IOleInPlaceUIWindow .
IOleInPlaceSiteEx
Если контейнер реализует этот интерфейс, он позволяет внедренным объектам проверять, нужно ли им перерисовываться при активации или деактивации. Это также позволяет им запрашивать активацию своего пользовательского интерфейса.
IOleInPlaceSiteWindowless
Если контейнер хочет поддерживать встроенные объекты без окон, ему необходимо предоставить встроенным объектам функциональность, заменяющую функциональность, обычно предоставляемую окном внедренного объекта. Например, этот интерфейс предоставляет способ доступа к контексту устройства окна контейнера, тем самым позволяя встроенному объекту рисовать в окне контейнера.
Иолеуилинкконтейнер
Содержит методы, которые стандартные диалоговые окна OLE, управляющие связанными объектами, используют для обновления связанных объектов в контейнере или для запроса и изменения их источников. Используется в диалоговых окнах «Ссылки», «Изменить источник», «Обновить ссылки» и «Свойства объекта».
IOleUILinkInfo
Кроме того, диалоговые окна могут запрашивать дату последнего обновления связанных объектов и было ли это сделано автоматически или вручную.
IOleUIObjInfo
Содержит методы, необходимые для диалогового окна «Свойства объекта». Например, если пользователь открывает диалоговое окно «Свойства объекта» и запрашивает преобразование объекта в другой тип, вызывается метод этого интерфейса.
IOleUndoManager
Предоставляет централизованную службу отмены как для самого контейнера, так и для встроенных объектов. При выполнении отменяемого действия IOleUndoUnit создается и добавляется в IOleUndoManager.
IDataAdviseHolder
Методы IDataObject , относящиеся к уведомлениям об изменении данных, можно реализовать путем вызова методов этого интерфейса.
Обычно используется стоковая реализация.
IOleAdviseHolder
Методы IOleObject , относящиеся к уведомлениям, можно реализовать, вызвав методы этого интерфейса.
Обычно используется стоковая реализация.
IDropSource
Реализованы объектами, которые можно перетаскивать, т.е. которые могут быть источником операций перетаскивания. При реализации он позволяет объекту рисовать эффекты перетаскивания и указывать, когда объект перетаскивается или операция перетаскивания отменяется.
IDropTarget
Реализуется объектами, которые принимают перетаскиваемые объекты, т. е. могут быть целью операций перетаскивания. При реализации он позволяет цели указать, будет ли принят отброшенный объект и что произойдет с объектом после его удаления.
IOleCommandTarget
Может быть реализован объектами (объектами OLE, контейнерами OLE и другими объектами), которые хотят поддерживать определенные стандартные команды. Это позволяет вызывающим абонентам запрашивать, поддерживаются ли команды, и выполнять команды. Команды, которые объект обычно желает реализовать, могут включать в себя такие вещи, как «удалить», «вырезать», «копировать», «вставить», «отменить», «найти», «распечатать», «сохранить», «масштабировать» и скоро. В настоящее время определены 58 стандартных команд, включая команды, обычно используемые офисным программным обеспечением, веб-браузерами и аналогичными приложениями.
IOleUndoUnit
Представляет действие, которое можно отменить. Он содержит всю информацию, необходимую для отмены действия. контейнера можно добавить отменяемые действия Он создается объектами и контейнерами, поэтому в IOleUndoManager .
IOleParentUndoUnit
Позволяет единице отмены содержать другие единицы отмены. По сути, это позволяет блоку отмены действовать как стек отмены, группируя блоки отмены вместе. Например, если запускается макрос, все действия, которые можно отменить, выполняемые макросом, могут быть сгруппированы в один блок отмены.
IOleWindow
Этот интерфейс представляет собой окно контейнера или содержащегося объекта. Это позволяет вызывающим сторонам получать дескриптор окна и переключать функцию контекстно-зависимой справки. Когда функция контекстно-зависимой справки включена, указатель мыши обычно меняется на стрелку со знаком вопроса, указывающую, что щелчок по элементу пользовательского интерфейса приведет к открытию окна справки.

Соревнование

[ редактировать ]

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

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

Совместимость

[ редактировать ]

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

См. также

[ редактировать ]
  1. ^ Эта статья основана на материалах, взятых из Object+Linking+and+Embedding в Бесплатном онлайн-словаре вычислений до 1 ноября 2008 г. и включенных в соответствии с условиями «повторного лицензирования» GFDL версии 1.3 или более поздней.
  2. ^ Байфилд, Брюс (23 августа 2005 г.). «Сравнение текстовых процессоров FOSS: OOo Writer, AbiWord и KWord» . Linux.com . Фонд Linux. Архивировано из оригинала 06.11.2020 . Проверено 29 сентября 2020 г.
  3. ^ Байфилд, Брюс (28 июля 2005 г.). «Обмен файлами между OpenOffice.org и Microsoft Office» . Linux.com . Фонд Linux. Архивировано из оригинала 06.11.2020 . Проверено 29 сентября 2020 г.
  4. ^ Шарма, Маянк (20 ноября 2008 г.). «SoftMaker Office 2008 ориентирован на совместимость с Microsoft Office» . Linux.com . Фонд Linux. Архивировано из оригинала 06.11.2020 . Проверено 29 сентября 2020 г.
  5. ^ Лагадек, Филипп (30 ноября 2006 г.). «Безопасность OpenOffice/OpenDocument и Microsoft Office 2007/Open XML» (PDF) . Конференция PacSec 2006 . Архивировано (PDF) из оригинала 22 июля 2011 г. Проверено 29 сентября 2020 г.
  6. ^ Гонг, Ретт (5 сентября 2005 г.). «RE: Объект OLE — растровое представление?» . Группа новостей : microsoft.public.win32.programmer.ole . Usenet:   [электронная почта защищена] . Проверено 29 сентября 2020 г.
  7. ^ О'Нил, Майк (9 февраля 2005 г.). «Расширенный элемент управления редактированием, отображающий растровые изображения и другие объекты OLE» . Код проекта . Архивировано из оригинала 31 декабря 2011 г. Проверено 29 сентября 2020 г.
  8. ^ «ACC: Почему объекты OLE вызывают рост баз данных» . Майкрософт . 19 января 2007 г. Архивировано из оригинала 15 февраля 2008 г.
[ редактировать ]
  • ripOLE — извлекает вложения из документов OLE
  • Фон OLE с сайта docs.microsoft.com.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a4924509002e7cb449f04a747bd7d7d8__1722208440
URL1:https://arc.ask3.ru/arc/aa/a4/d8/a4924509002e7cb449f04a747bd7d7d8.html
Заголовок, (Title) документа по адресу, URL1:
Object Linking and Embedding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)