- •Изучение способов разработКи простейших com-объектов в среде delphi.
- •5.6 Методические указания.
- •5.6.1 Основные сведения о сом-объектах
- •5.6.2 Составляющие com-приложений
- •5.6.2.1 Способы взаимодействия com-клиентов с com-серверами
- •5.6.2.2 Регистрация com-сервера
- •5 .6.2.3 Библиотека com
- •1.6.2.4 Hresult.
- •5.6.2.5 Библиотека типов.
- •5.6.2.6 Общие сведения о com-клиентах
- •5.6.3 Объекты com в среде Delphi.
- •5.6.3.1 Средства реализации интерфейсов в среде Delphi.
- •5.6.3.2 Классы TcomObj, Coclass и tTypedComObject.
- •5.6.3.3 Пример простейшего приложения с применением интерфейсов.
- •ShowMessage(MyInterface.GetName);
- •5.6.4 Разработка структуры клиентского и серверного приложений.
- •5.6.5 Создание внутреннего сервера сом.
- •5.6.5.1 Создание динамической библиотеки.
- •5.6.5.2 Создание объекта сом.
- •5.6.5.3 Создание интерфейсов объекта сом.
- •5.6.5.4 Задание кода методов интерфейса.
- •5.6.6 Разработка клиентского приложения для внутреннего сервера
5.6.2.5 Библиотека типов.
При создании СОМ-объектов часто используются библиотеки типов.
Библиотека типов (Type Library) - это специальный файл, который содержит информацию о СОМ-объекте. Чтобы документировать интерфейсы объекта для пользователей, разработчик создает информацию о типах объекта с помощью специализированного языка описания интерфейса IDL (Interface Definition language). На IDL можно написать полную и точную спецификацию интерфейса объекта COM. Описания интерфейса на языке IDL очень похожи на описание на языке C++.. Они содержит список свойств, методов, интерфейсов, структур и других элементов, которые содержатся в СОМ-объекте. Библиотека типов содержит также информацию о типах данных каждого свойства и типах данных, возвращаемых методами СОМ-объекта. Файлы библиотеки типов имеют расширение *.TLB.
Например, рассмотрим использование IDL для описания гипотетического интерфейса объекта COM - корректировщика орфографии - ISpellChecker.
Допустим, ISpellChecker содержит следующие методы:
- LookUpWord - проверяет наличие в словаре слова, получает в качестве параметров слово для проверки и указатель на булевскую переменную, где будет установлен результат проверки;
- AddToDictionary - добавляет в словарь слово, получает в качестве параметра слово для добавления;
-
RemoveFromDictionary - удаляет из словаря слово,
получает в качестве параметра слово
для удаления.
Тогда спецификация на IDL будет выглядеть следующим образом (рис 1. ):
Информация об интерфейсе оформляется в виде отдельного объекта внутри библиотеки. Для создания библиотеки типов, описанной с помощью операторов IDL, используются специальные компиляторы. Доступ к библиотеке осуществляется по clsid класса объекта. Кроме того, библиотека имеет собственный GUID, который сохраняется в системном реестре при регистрации объекта, для которого создана библиотека типов.
Каждая библиотека типов имеет интерфейс iTypeLib, который дает возможность работать с ней, как с единым объектом. Для доступа к информации об отдельном интерфейсе используется интерфейс iTypeinfo. Для доступа к библиотеке по GUID применяется функция LoadRegTypeLib. Если клиенту известно имя файла библиотеки, то можно воспользоваться функцией LoadTypeLib.
Библиотека типов может использоваться клиентами при обращении к объекту для получения начальной информации о доступных идентификаторах, интерфейсах, методах. В принципе, эти же данные можно получить и программными средствами, используя системный реестр и возможности базовых интерфейсов СОМ. Однако не всегда удобно дополнять приложение довольно сложным блоком кода из-за применения небольшого объекта для вспомогательных целей.
Следует отметить, что в Delphi при создании библиотеки типов обычно используется не язык IDL, а синтаксис языка Object Pascal. Это обусловлено тем, что при разработке библиотек типов в Delphi, как правило, не требуется их писать код вручную, так как код библиотеки типов генерируется автоматически, а для внесения необходимых изменений и дополнений используется специальный редактор библиотеки типов, работа с которым будет рассмотрена в п. 5.6.4.3 и в Приложении 1. Поэтому при разработке объектов СОМ с помощью Delphi не требуется детальных знаний синтаксиса описания интерфейсов. В то же время, код библиотеки типов, разработанной в Delphi на основе языка Object Pascal, может быть в дальнейшем при необходимости экспортирован в формат IDL, обеспечивая, тем самым, возможность применения собственных объектов в любых приложениях Windows.
