double arrow

ActiveX и автоматизация (Automation) в виде OLE-automation

OLE

Появившаяся еще в ранних версиях Windows технология связывания и внедрения объектов (OLE, Object Link and Embedding) произвела настоящий фурор в кругах пользователей. Тем более, что сама идея (обмен данными между приложениями и предоставление служб одного программного продукта другому) в те времена была просто революционной. Теперь какой-либо объект (например, файл мультимедиа), подготовленный сторонним приложением, может быть использован другим программным продуктом или даже внедрен в состав его документа. Причем приложение- получатель услуг OLE не обязано знать, каким образом был создан внедренный в него объект, и уж тем более вникать в особенности его работы. Единственная обязанность приложения - иметь представление об элементарных методах современной версии OLE - OLE 2.0.

Главное действующее лицо технологии OLE - OLE-объект (OLE object). Это совокупность данных, которые совместно используются несколькими приложениями. Объекты могут внедряться в документы (вспомните пункт меню Вставка - Объект текстового процессора Microsoft Word).

Документ, содержащий OLE-объекты, называют составным документом (compound document).

Приложения, способные содержать OLE-объект, называются OLE- контейнерами (OLE container).

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

Как следует из названия технологии, объект OLE может быть связан (linked) или внедрен (embedded) в составной документ.

Связанные объекты сохраняются в отдельном файле на диске. Благодаря средствам связывания объектов несколько контейнеров - или даже приложение-сервер - могут быть связаны с одним и тем же объектом OLE, расположенным на диске. Если одно из приложений модифицирует связанный объект, внесенные изменения распространяется на все приложения, связанные с данным объектом.

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

Одно из основных различий между объектами OLE, ассоциированными с 16- разрядными серверами OLE 1 и с 32- разрядными серверами OLE 2, заключается в способе их активизации. Когда активизируется объект, созданный для сервера OLE 1, запускается и получает фокус ввода приложение-сервер, а объект OLE появляется в нем в готовом для редактирования виде. Когда активизируется объект OLE 2, приложение-сервер OLE 2 становится активным неявно, "внутри" приложения-контейнера. Это называется активизацией по месту вставки (in-place activation), или визуальным редактированием (visual editing).

При активизации объекта OLE 2 меню и панели инструментов приложения- сервера заменяются или сливаются с соответствующими элементами приложения- клиента, а часть окна приложения-клиента, по сути, становится окном приложения- сервера.

COM - это стандарты интерфейсов API и бинарные стандарты, которые служат основой для построения всех остальных технологий данного семейства.

С 1995 году аббревиатура OLE была общим термином, использовавшимся для описания целого набора технологий, основанных на архитектуре COM. Тогда термин "OLE" применялся только для тех технологий, которые непосредственно имели дело со связыванием и внедрением, а именно:

а) использование контейнеров и серверов;

б) активизация по месту вставки или внедрения;

в) технология "перетащить и опустить" (drag-and- drop);

г) слияние меню.

В 1996 году Microsoft начинает агрессивную маркетинговую кампанию по внедрению в язык разработчиков термина «ActiveX».

Последний становится всеобъемлющим и используется для описания технологий, отличных от OLE, но основанных на применении COM.

Технология ActiveX включает в себя автоматизацию (OLE-автоматизацией), элементы управления, документы, контейнеры, сценарии и некоторые технологии Internet. Поскольку началась неразбериха, вызванная стремлением использовать термин "ActiveX" для описания всего, так или иначе связанного с технологией OLE, корпорация Microsoftслегка "дала задний ход" и сейчас иногда называет все технологии, отличные от OLE, но основанные на модели компонентных объектов, просто и незатейливо - СОМ-ориентированные технологии (COM-based technologies).

В компьютерной индустрии критический взгляд на творчество этой корпорации получил свое выражение в следующей фразе: мы говорим "OLE" - подразумеваем "замедление работы и увеличение размера приложений". В результате для маркетинговых решений корпорации Microsoft потребовалась новая терминология, предназначенная для новых интерфейсов API, которые были положены в основу будущих операционных систем и технологий Internet.

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

Технология ActiveX прекрасно вписывается в традицию Delphi многократно использовать программный код, созданный ранее. Не нужно заново писать код для управления конкретным типом данных, если уже существует работоспособное приложение OLE-сервера. Какой бы сложной ни показалась технология OLE, она все же лучше других альтернативных решений.

Корпорация Microsoftинвестировала значительные средства в технологию ActiveX, и теперь разработчики операционных систем серии Windows вынуждены ближе знакомиться с технологией ActiveX, чтобы использовать все ее преимущества в своих приложениях.

Одним из аспектов ActiveX является автоматизация (automation). Обычно ее называют OLE-automation. Это средство позволяет приложениям (называемым контроллерами автоматизации - automation controller) управлять объектами, ассоциированными с другими приложениями или динамическими библиотеками (именуемыми сервером автоматизации - automation server).

Иными словами, приложение, предоставляющее свои программируемые объекты, называется сервером автоматизации. В роли таких серверов могут выступать программы пакета Microsoft Office: Microsoft Word, Microsoft Excel, Microsoft Access, Microsoft PowerPoint, Microsoft Outlook. В свою очередь приложение, получающее в свое распоряжение объекты автоматизации, именуют контроллером автоматизации.

Автоматизация позволяет управлять объектами в другом приложении и, наоборот, - предоставлять функциональные элементы своего приложения другим приложениям.

В отличие от технологии COM-сервера, допускающего обращение к методам COM-объектов только через указатели на интерфейс, более «доброжелательная» технология автоматизации разрешает программисту вызывать методы по их именам. Благодаря этой особенности OLE-automation может использоваться даже в языках программирования, не умеющих работать с указателями.

Контроллер автоматизации способен распоряжаться объектами сервера независимо от языка, применяемого для разработки этих компонентов, поскольку для управления своими программируемыми объектами сервер автоматизации предоставляет контроллеру некий интерфейс, построенный на основе интерфейса IDispatch. По сути, объект автоматизации - это обычный COM- объект, в котором реализован этот интерфейс. Посредством интерфейса IDispatch программист получает доступ к макроязыку пакета Microsoft Office.

Синтаксис описываемых свойств и методов является чем-то вроде перевода программы с языка Basic for application на языкObject Pascal и никоим образом не претендует на академичность. Например, мы привыкли, что в Delphi перед названием класса ставится символ «Т» (TObject, TForm, TEdit). По аналогии с этим соглашением при описании свойств и методов перед названием объекта из состава Office будет ставиться префикс «I» (IApplication, ITable, IFont и т. д.). Это сделано для того, чтобы не путать объекты Microsoft Office с классами библиотеки VCL. Кроме того, символ «I» (Interface) будет напоминать о том, что мы работаем с интерфейсом объекта.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: