Введение

В программировании приложений Microsoft Windows, OLE Automation (впоследствии переименованная просто в Automation) — это механизм межпроцессного взаимодействия, разработанный Microsoft. Он основан на подмножестве Component Object Model (COM), которое изначально предназначалось для использования в скриптовых языках — в первую очередь Visual Basic, но теперь используется во многих языках в Windows. Все объекты автоматизации обязаны реализовывать интерфейс IDispatch. Он предоставляет инфраструктуру, позволяющую приложениям, именуемым контроллерами автоматизации, получать доступ и управлять (то есть устанавливать свойства или вызывать методы) общими объектами автоматизации, экспортируемыми другими приложениями. Он заменяет Dynamic Data Exchange (DDE) — более старый механизм для управления приложениями друг другом. Как и в случае с DDE, в OLE Automation контроллер автоматизации выступает в роли "клиента", а приложение, экспортирующее объекты автоматизации, — в роли "сервера". Вопреки своему названию, объекты автоматизации не обязательно используют Microsoft OLE, хотя некоторые объекты автоматизации могут быть использованы в средах OLE. Неоднозначность связана с более ранним определением Microsoft OLE, которое ранее было в значительной степени синонимом COM.

Преимущества и ограничения

Для обеспечения совместимости интерфейсы автоматизации используют только подмножество всех типов COM. В частности, в интерфейсах автоматизации необходимо использовать SAFEARRAY вместо стандартных массивов COM. Однако COM-серверы, поддерживающие автоматизацию, могут использовать встроенную реализацию маршаллинга OLE, что позволяет избежать необходимости создания дополнительных прокси/заглушек для межпроцессного взаимодействия.

Использование

Автоматизация разрабатывалась с учетом удобства написания скриптов, поэтому контроллеры часто предоставляют конечным пользователям такие языки, как Visual Basic for Applications, позволяя им управлять объектами автоматизации посредством скриптов. Объекты автоматизации часто создаются на традиционных языках программирования, таких как C++, где атрибуты C++ могут использоваться для упрощения разработки. Языки, такие как Visual Basic и Borland Delphi, также предоставляют удобный синтаксис для работы с автоматизацией, скрывая сложность лежащей в основе реализации.

Библиотеки типов

Для автоматизации приложения разработчик контроллера автоматизации должен знать объектную модель, используемую целевым приложением, экспортирующим объекты активации. Это требует, чтобы разработчик целевого приложения публично документировал свою объектную модель. Разработка контроллеров автоматизации без знания объектной модели целевого приложения является "крайне сложной или невозможной". В связи с этими сложностями, компоненты автоматизации обычно предоставляются с библиотеками типов, которые содержат метаданные о классах, интерфейсах и других возможностях, предоставляемых библиотекой объектов. Интерфейсы описываются на языке Microsoft Interface Definition Language. Библиотеки типов можно просматривать с помощью различных инструментов, таких как Microsoft OLE/COM Object Viewer (oleview.exe, часть Microsoft Platform SDK) или обозреватель объектов в Visual Basic (до версии 6) и Visual Studio .NET. Библиотеки типов используются для генерации прокси-кода (stub-кода) для взаимодействия между COM и другими платформами, такими как Microsoft .NET и Java. Например, NET Framework SDK включает инструменты, которые могут генерировать прокси-DLL для .NET для доступа к объектам автоматизации, используя как раннее связывание (с информацией об интерфейсах, извлеченной из библиотеки типов), так и позднее связывание (через IDispatch, сопоставленное с API .NET Reflection), с использованием встроенного моста .NET к COM, называемого COM Interop. В то время как Java не имеет встроенной поддержки COM, такие инструменты, как JACOB и jSegue, могут генерировать прокси-исходный код (состоящий из двух частей: набора классов Java и исходного кода C++ для DLL Java Native Interface) из библиотек типов. Эти решения работают только в Windows. Существует также Java-библиотека j Interop, которая обеспечивает взаимодействие с компонентами COM без JNI, используя протокол DCOM (MSRPC) и работает на платформах, отличных от Windows. Microsoft публично документировала объектную модель всех приложений в Microsoft Office, а некоторые другие разработчики программного обеспечения также документировали объектные модели своих приложений. Объектные модели предоставляются контроллерам автоматизации в виде библиотек типов, с описанием их интерфейсов на языке ODL.