Технология OLE Automation

Язык IDL

Многие средства разработки, используемые для создания СОМ-серверов, содержат в комплекте поставки утилиты для автоматической генерации библиотек типов или клиентского и серверного кода на основании описаний интерфейсов сервера. Во многих случаях эти описания создаются на языке IDL (Interface Definition Language — язык определения интерфейсов).

Язык IDL нужен для спецификации интерфейсов. Фактически это стандарт, позволяющий описывать вызываемые методы сервера и их параметры, не вдаваясь в детали и правила реализации серверов и клиентов на том или ином языке программирования. Используя IDL, можно описать интерфейсы сервера, а затем создать его реализацию, равно как и реализацию клиента, на любом языке программирования с помощью широкого спектра средств разработки. В определенном смысле IDL — это стандарт для описания взаимодействия между компонентами распределенной системы, не зависящий от деталей реализации и языков программирования (а в общем случае не зависящий также от платформ, поскольку IDL используется не только в СОМ).

В настоящее время существует несколько диалектов IDL (для СОМ, для CORBA, для DCE и др.). Тем не менее различия между ними невелики.

Многие средства разработки, поддерживающие создание СОМ-серверов, имеют в своем составе утилиты для генерации серверного и клиентского кода на основании описаний на IDL. В частности, в состав Microsoft Visual С ++ включен компилятор MIDL, генерирующий код для клиентских и серверных библиотек, ответственных за взаимодействие клиента и сервера, на основании созданных разработчиками описаний на IDL.

Отметим, однако, что при создании СОМ-серверов с помощью мастеров Delphi библиотеки типов и соответствующий код (или его «заготовки») генерируются автоматически и нет необходимости вручную создавать описания на IDL. При этом всегда можно сгенерировать описание на IDL на основании библиотеки типов сервера, созданной с помощью соответствующего редактора.

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

· интерфейс, реализуемый СОМ-сервером, должен наследоваться от интерфейса IDispatch;

· должны использоваться типы данных из числа поддерживаемых технологией OLE Automation;

· все методы интерфейса должны быть либо процедурами, поддерживающими соглашение о вызове safecall, либо функциями, поддерживающими соглашение о вызове safecall и возвращающими значение тина HRESULT;

· для поддержки пользовательских типов данных должен быть реализован специальный интерфейс IRecordInfo.