Microsoft OLE Automation

Microsoft OLE Automation

OLE Automation — технология компании Microsoft, позволяющая обращаться к COM-объектам из интерпретаторов скриптовых языков, таких, как VBScript (на настоящий момент поддержка обращений к OA-объектам есть в Windows-версиях всех популярных скриптовых языков).

История

Впервые появилась около 1993 как замена устаревшей возможности DDE_EXECUTE.

Среда программирования Visual Basic была практически полностью основана на OLE Automation, с такими типами данных, как String и Variant.

Практическая важность

Объектами OLE Automation являются все элементы управления ActiveX (OCX-контролы). Свойства, методы и события этих компонент реализованы с помощью OLE Automation.

Также объектами OLE Automation являются многие популярные приложения, такие, как компоненты Microsoft Office. Это дает возможность запустить и управлять даннным приложением (например, Excel, например, сформировать программно таблицу, заполнить в ней ячейки и сохранить в файл) из скрипта, написанного на скриптовом языке.

Также объектами OLE Automation являются все тэги Dynamic HTML (при использовании Trident или же — вроде как, нужно проверить — Apple WebKit или Google Chrome).

Также на этой технологии основана WMI (ее слой, отвечающий за общение с клиентскими программами) и ряд административных утилит Windows, например, управление веб-сервером IIS.

Детали

Технология определяет те COM интерфейсы, через которые интерпретатор языка будет общаться с объектом.

Технология поддерживает:

  • свойства, методы и события
  • свойство или метод по умолчанию
  • необязательные и именованные аргументы методов
  • аргументы методов «по значению» и «по ссылке».

Типы данных OLE Automation (могут использоваться в свойствах, методах и событиях):

  • целые
  • плавающая точка
  • дата/время DATE — дробное (с плавающей точкой) число дней с 30.12.1989.
  • строка BSTR. Строка UTF-16 с завершающим нулем, аллоцированная специальным аллокатором в oleaut32.dll, освобождается вызовом SysFreeString.
  • указатель IUnknown на объект OLE Automation
  • массив SAFEARRAY. Может быть многомерным. Аллоцируется и освобождается семейством вызовов SafeArrayXxx в oleaut32.dll, можно получить на него указатель как на массив Си.
  • вариант VARIANT. Union с полем, указывающим тип — один из указанных выше, или другой VARIANT, или ссылка на один из этих типов (используется в аргументах «по ссылке»)

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

Также технология поддерживает type libraries — информацию о типах свойств/методов/аргументов, доступную во время выполнения (нечто вроде Reflection в .NET).

Обычно технология разрешает имена свойств и методов при исполнении, никак не проверяя их на этапе разбора, и возбуждая ошибку «объект не поддерживает свойство или метод» только при исполнении (позднее связывание). Однако, если у объекта есть type library, зарегистрированная на машине, то в некоторых средах разработки можно объявить его так, что имена будут проверяться на этапе разбора. В Visual Basic это делалось операторами Dim o As Object (только позднее связывание) или же Dim o As Excel.Application (раннее связывание, но требуется установка Excel на машину построения и добавление Excel к списку использованных в проекте компонент).

На уровне языков Си/Си++ вызов OLE Automation выглядит как вызов IDispatch::Invoke, куда передаются преобразованные в константы строковые имена метода/свойства/аргументов, и значения аргументов, преобразованных в типы OLE Automation. Это крайне неудобно и вызывает расходы произодительности, потому у многих объектов реализованы т. н. дуальные интерфейсы — потомки IDispatch, реализующие и Invoke (используется скриптами и в случае объявления As Object), ровно тот же функционал через обычные COM методы (используется C++ и теми интерпретаторами, что понимают дуальные интерфейсы, как Visual Basic). При этом сохраняется ограничение на типы данных, приведенное выше. Библиотека ATL содержит в себе фреймворк поддержки дуальных интерфейсов.

Компилятор Microsoft C++ поддерживает директиву #import — включение type library (.tlb или же исполняемого файла, в который она вшита). При этом из исходного файла генерируются автоматически заголовки Си++, использующие средства comdef.h (смарт-пойнтеры на COM объекты и т. д.).

Цикл разработки объектов:

  • проектирование интерфейсов, с учетом ограничения на типы данных (нет структур и т. д.).
  • написание IDL файла (вручную или же с помощью визардов из Visual Studio).
  • написание классов, реализующих интерфейсы, объявленные в IDL.

Цикл построения объектов:

  • midl.exe компилирует IDL, создавая бинарный файл .tlb (type library, интерфейсы для извлечения информации из нее предоставлены oleaut32.dll), заголовок Си/Си++ и .c файл, в котором объявлены все GUIDы из IDL
  • .c файл с GUIDами строится вместе с проектом
  • заголовок включается в .c/.cpp файлы, содержащие реализацию класса
  • link.exe может вшить .tlb в создаваемый исполняемый файл (как ресурс 1 TYPELIB)



Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Microsoft OLE Automation" в других словарях:

  • Microsoft UI Automation — (UIA) is an Application Programming Interface (API) for User Interface (UI) accessibility that is designed to help Assistive Technology (AT) products interact with standard and custom UI elements of an application (or the operating system) as… …   Wikipedia

  • OLE Automation — In Microsoft Windows applications programming, OLE Automation (later renamed by Microsoft to just Automation,[1][2] although the old term remained in widespread use), is an inter process communication mechanism based on Component Object Model… …   Wikipedia

  • OLE Automation — En los programas de aplicación de Microsoft Windows, OLE Automation (posteriormente renombrado por Microsoft a Automation), es un mecanismo formal de comunicación entre procesos basado en COM. Facilita una infraestructura que permite que… …   Wikipedia Español

  • OLE Automation — Dans la programmation d applications Microsoft Windows, OLE Automation (rebaptisé par la suite Automation par Microsoft, même si l ancienne appellation demeure largement utilisée), est le mécanisme de communication inter processus basé sur… …   Wikipédia en Français

  • OLE — OLE, Ole or Olé may also refer to: Ole (name), a male given name, includes people named Ole Object Linking and Embedding, a distributed object system and protocol developed by Microsoft OLE Automation, an inter process communication mechanism… …   Wikipedia

  • Microsoft Active Accessibility — (MSAA) is an Application Programming Interface (API) for user interface accessibility. MSAA was introduced as a platform add on to Microsoft Windows 95 in 1997. MSAA is designed to help Assistive Technology (AT) products interact with standard… …   Wikipedia

  • OLE DB — (англ. Object Linking and Embedding, Database)  набор интерфейсов, основанных на COM, которые позволяют приложениям обращаться к данным, хранимым в разных источниках информации или хранилищах данных с помощью унифицированного доступа.… …   Википедия

  • Microsoft Office — Developer(s) Microsoft Initial release November 19, 1990; 21 years ago ( …   Wikipedia

  • Microsoft Management Console — A component of Microsoft Windows …   Wikipedia

  • Microsoft Interface Definition Language — (MIDL)  текстовый язык описания интерфейсов, разработанный корпорацией Microsoft на основе DCE/RPC IDL. При использовании языка MIDL совместно с RPC требуется хорошее знание языков программирования C/C++ и основных принципов RPC. При… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»