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

Редактор библиотек типов
Информация о библиотеке типов

Вкладка Attributes в описании библиотеки типов
Вкладка Uses в описании библтотеки типов

Перечисления (Enum) в библиотеках типов

Вкладка Attributes в описании перечисления
Вкладка Members в описании перечисления

Элементы Interface и Displnterface в библиотеках типов

Вкладка Attributes в описании интерфейса
Вкладка Members в описании интерфейса
Вкладка Attributes в описании свойств и методов интерфейса

Составные классы (CoClass) в библиотеках типов

Вкладка Attributes в описании классов составных объектов
Вкладка Members в описании составного класса

Библиотеки типов — это составные документы OLE, в которых содержится информация об объектах СОМ, элементах управления ActiveX и объектах автоматизации. Информация о типах включает перечисления, свойства и методы интерфейсов.
Библиотека типов предназначена для предоставления другим приложениям и средам программирования информации о составных объектах, которые в ней содержатся. В процессе разработки элементов управления ActiveX и объектов автоматизации Delphi сохраняет информацию о типах в файле с расширением TLB, который в качестве ресурса компонуется в модуль DLL или ЕХЕ.
В следующих разделах будут коротко описаны возможности редактора библиотек типов Delphi и типы, которые создаются для элементов управления ActiveX, форм ActiveForm, объектов автоматизации и т.п.

Редактор библиотек типов
Редактор библиотек типов Delphi используется для просмотра и редактирования библиотек типов. Основой интерфейса редактора является панель Object List (рис. 3.1), с помощью которой пользователь может изменять, добавлять и удалять элементы библиотеки типов. Элементами библиотек типов являются составные классы, свойства и методы интерфейсов и перечисления. Панель Object List представляет элементы в виде дерева объектов. В зависимости от типа элемента, выбранного в панели Object List, в правой части редактора библиотек типов появляются различные вкладки. Возможно, это будут вкладки Attributes, Members и Uses.
Для редактирования библиотеки типов текущего проекта выполните команду View/Type Library. Чтобы просмотреть библиотеку типов, не являющуюся частью проекта, выберите пункт меню File/Open. После этого в списка File of type выберите строку Type Library (*.tlb;*.dll;*.ocx;*.exe;*.olb), чтобы вывести все файлы, которые могут содержать информацию о типах.
Теперь более детально рассмотрим каждый элемент библиотеки типов. Начнем с информации о библиотеке.

Информация о библиотеке типов
Каждая библиотека типов включает раздел, описывающий саму библиотеку, — элемент библиотеки типов. Когда этот элемент выбран в панели Object List (см. рис. 3.1), в правой части экрана редактора библиотеки типов появляются две вкладки: Attributes и Uses. Два следующих раздела описывают назначение вкладок Attributes и Uses в элементе библиотеки типов.

Вкладка Attributes в описании библиотеки типов
Во вкладке Attributes (атрибуты) содержится общая информация и характеристики библиотеки типов. Показанные ниже атрибуты и флаги появляются в этой вкладке, когда в панели Object List выбран элемент библиотеки типов (см. рис. 3.1). В табл. 3.1 перечислены все атрибуты, а в табл. 3.2 — все флаги библиотеки типов.

Рис. 3.1. Редактирование данных о библиотеке типов

Таблица 3.1. Атрибуты библиотеки типов

Атрибут | Описание
Name | Имя библиотеки типов
GUID | Глобально уникальный 128-разрядный идентификатор библиотеки типов
Version | Версия библиотеки типов, записанная в формате п.т, где п — старший и т — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535
LCID | Идентификатор места действия (locale), описывающий один национальный язык, который используется для всех текстовых строк в библиотеке типов и ее элементах
Help String | Краткое описание библиотеки. Настоятельно рекомендуется указывать эту строку во всех созда-ваемых библиотеках
Help File | Имя файла справки, связанной с библиотекой типов
Help Context | Идентификатор контекста справки библиотеки типов

Таблица 3.2. Флаги библиотеки типов

Флаг | Описание
None | Флаги не установлены
Restricted | Запрещает использовать библиотеку типов в средах программирования макросов, таких как Visual Basic
Control | Указывает, что библиотека содержит элемент управления, который будет использован на стороне сервера для порождения новых библиотек типов и классов составных объектов (CoClass)
Hidden | Указывает, что библиотека существует, но не должна быть показана в пользовательских броузерах

Вкладка Uses в описании библтотеки типов
Во вкладке Uses показаны все библиотеки, на которые ссылается просматриваемая библиотека. С помощью ссылок на другие библиотеки типов можно заимствовать определение элементов, таких как пересечение или интерфейсы. Это поможет разработчику определить собственные интерфейсы в собственной библиотеке типов. Например, основной интерфейс сервера автоматизации порожден от интерфейса IDispatch, но вам не придется изобретать колесо, так как Delphi автоматически создает ссылку на библиотеку типов STDOLE32. TLB, в которой определен интерфейс IDispatch. Библиотека STDOLE32.TLB является основной библиотекой типов Windows.
С каждой записью вкладки Uses связано две части информации. Первая часть — имя библиотеки, на которую создается ссылка, вторая — идентификатор GUID, который идентифицирует библиотеку типов в реестре Windows.

Перечисления (Enum) в библиотеках типов
Перечисления в библиотеках типов практически не отличаются от перечислений языка Object Pascal. Перечисление в библиотеке типов — это коллекция связанных констант, используемая как тип данных во всех остальных элементах библиотеки для определения свойств или методов. Кроме того, в зависимости от среды программирования константы перечисления могут использоваться с объектом ActiveX внутри среды программирования. В следующих двух разделах рассматривается назначение вкладок Attributes и Members в описании перечислений.

Вкладка Attributes в описании перечисления
На рис. 3.2 показано перечисление (Enum), выбранное в окне редактора библиотек типов Delphi с вкладкой Attributes в правой части окна редактора. В табл. 3.3 перечислены все возможные атрибуты, которые можно использовать с перечислением.

Рис. 3.2. Редактирование перечисления в библиотеке типов

Таблица 3.3. Атрибуты перечисления в библиотеке типов

Атрибут | Описание
Name | Имя перечисления
GUID | 128-разрядный идентификатор GUID-перечисления
Help String | Краткое описание перечисления. Настоятельно рекомендуется указывать эту строку во всех создаваемых библиотеках
Help Context | Идентификатор контекста справки по перечислению
Version | Версия библиотеки типов, записанная в формате п.т, где n — старший и m — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535

Вкладка Members в описании перечисления
Во вкладке Members определяются сами константы, составляющие перечисление. Формат определения константы показан ниже.

<Имя константы> = <Значение константы>;
helpstring = 'Строка описания';

Настоятельно рекомендуется указывать строку описания для членов перечисления, так как приложения, использующие ваш объект СОМ, могут зависеть от строк описания. На рис. 3.3 показана вкладка Members описания перечисления.

Рис. 3.3. Редактирование элементов перечисления в библиотеке типов

Элементы Interface и Displnterface в библиотеках типов
Интерфейс в библиотеке типов — это коллекция определении свойств и методов. Клиент может получить доступ к интерфейсам либо посредством таблицы виртуальных методов, либо с помощью специального интерфейса OLE I Dispatch, который позволяет использовать свойства и методы объектов через уникальный идентификатор или DispID. Элемент Displnterface определяет интерфейс, доступ к которому можно получить только через интерфейс IDispatch. Двойной интерфейс (dual interface) — это интерфейс, доступ к которому можно получить и через таблицу виртуальных методов, и через интерфейс IDispatch. В следующих двух разделах рассматривается назначение вкладок Attributes и Members в описании интерфейсов.

Вкладка Attributes в описании интерфейса
На рис. 3.4 показан интерфейс, выбранный в окне редактора библиотек типов, с вкладкой Attributes в правой части окна редактора. В табл. 3.4 перечислены все возможные атрибуты, которые можно использовать в описании интерфейса, а в табл. 3.5 — все флаги, используемые в описании интерфейса.

Таблица 3.4. Атрибуты интерфейсов в библиотеках типов

Атрибут | Описание
Name | Имя перечисления
GUID | 128-разрядный идентификатор GUID-перечисления
Help | String Краткое описание перечисления. Настоятельно рекомендуется указывать эту строку во всех создаваемых библиотеках
Help Context | Идентификатор контекста справки по перечислению
Version | Версия библиотеки типов, записанная в формате п.т, где п — старший и т — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535
Parent Interface | Имя интерфейса, являющегося базовым классом для выбранного интерфейса. Этот атрибут не применяется для интерфейсов Displnterface

Рис. 3.4. Редактирование атрибутов интерфейсов в библиотеке типов

Таблица 3.5. Флаги интерфейсов в библиотеках типов

Флаг | Описание
Displnterface | Элемент описывает методы и свойства объекта, доступ к которому можно получить только через метод Invoke интерфейса Idispatch
Hidden | Указывает, что интерфейс существует, но не должен быть показан в пользовательских броузерах
Nonextensible | Указывает, что реализация интерфейса IDispatch включает только те свойства и методы, которые показаны в описании интерфейса
Dual | Указывает, что интерфейс предоставляет методы и свойства через интерфейс IDispatch и таблицу виртуальных методов
OLE Automation | Указывает, что интерфейс может использовать только совместимые с автоматизацией типы данных. С элементом Displnterface этот флаг использовать нельзя, так как данный элемент совместим с автоматизацией по определению

Вкладка Members в описании интерфейса
Вкладка Members в описании интерфейса содержит свойства интерфейса и методы, определенные в этом интерфейсе. За исключением незначительных отличий, синтаксис объявлений констант и методов совпадает с синтаксисом языка Object Pascal. Первое отличие проявляется в том, что после описания каждого свойства и метода должен следовать уникальным идентификатор или DispID. Обычно значения DispID начинаются с 1 и увеличиваются на 1 для каждого следующего элемента. Вторым отличием являются ключевые слова readonly и writeonly, которые позволяют запрещать запись и чтение свойств соответственно. Ниже показан пример определения методов и свойств.

property FrameCount: Integer; readonly; dispid 1;
property Play(FromFrame, ToFrame: Smallint; Count: Integer); dispid 2;
property OpenDatabase[DatabaseName, TableName, UserName, Password : WideString]: WordBool; dispid 3;

Последним является определение параметризованного свойства с разрешением только чтения. В примере это свойство использовано не только для демонстрации такого типа свойств, но и потому, что некоторые серверы ActiveX предпочитают использовать параметризованные свойства вместо методов. На рис. 3.5 показана вкладка Members описания интерфейса в редакторе библиотек типов Delphi.

Рис. 3.5. Редактирование членов интерфейса в библиотеке типов
Если для описания интерфейса используется инструкция Displnterface, то для определения методов и свойств интерфейса можно использовать только совместимые с автоматизацией OLE типы данных. Совместимыми с OLE являются следующие типы данных: Byte, Smallint, Integer, Single, Double, Currency, TDateTime, WideString, WordBool и OleVariant. Для передачи многомерных структур данных можно использовать массивы данных типа OleVariant.

Вкладка Attributes в описании свойств и методов интерфейса
На рис. 3.6 показано свойство интерфейса, выбранное в окне редактора библиотек типов, с вкладкой Attributes в правой части окна редактора. В табл. 3.6 перечислены все атрибуты, которые используются в определении членов интерфейса, а в табл. 3.7 — все возможные флаги.

Таблица 3.6. Атрибуты членов интерфейса в библиотеках типов:

Атрибут | Описание
Declaration | Объявление свойства или метода
ID | Значение идентификатора DispID
Help String | Краткое описание свойства или метода
Help Context | Идентификатор контекста справки по свойству или методу

Рис. 3.6. Редактирование атрибутов в библиотеке типов

Таблица 3.7. Флаги членов интерфейса в библиотеках типов

Флаг | Описание
Restricted | Запрещает использовать библиотеку типов в средах программирования макросов, таких как Visual Basic
Source | Указывает, что член возвращает объект или значение типа VARIANT, являющееся источником событии
Bindable | Указывает, что свойство поддерживает связывание (binding) данных
Request Edit | Указывает, что свойство поддерживает сообщение OnRequestEdit
Display Bindable | Указывает, что свойство должно быть показано пользователю как поддерживающее связывание данных (bindable)
Default Bindable | Указывает на одно поддерживающее связывание данных свойство, которое наилучшим образом представляет объект
Hidden | Указывает, что интерфейс существует, но не должен быть показан в пользовательских броузерах

Составные классы (CoClass) в библиотеках типов
Составной класс в библиотеке типов (CoClass) представляет весь элемент управления ActiveX, объект автоматизации или специальный объект СОМ. Составной класс включает интерфейсы и диспинтерфейсы, которые предоставляются клиентскому приложению. В следующих двух разделах рассматривается назначение вкладок Attributes и Members редактора библиотек типов в описаниях классов составных объектов.

Вкладка Attributes в описании классов составных объектов
В табл. 3.8 перечислены все атрибуты, а в табл. 3.9 — флаги, которые используются в описаниях составных классов.

Таблица 3.8. Атрибуты составных классов в библиотеках типов

Атрибут | Описание
Name | Имя составного класса (CoClass)
GUID | Уникальный 128-разрядный идентификатор GUID составного класса (CoClass)
Help String | Краткое описание составного класса. Настоятельно рекомендуется указывать эту строку во всех создаваемых библиотеках
Help Context | Идентификатор контекста справки по составному классу
Version | Версия библиотеки типов, записанная в формате п. т, где n — старший и m — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535.

Таблица 3.9. Флаги составных классов в библиотеках типов

Флаг | Описание
Licensed | Указывает, что во время разработки и выполнения требуется лицензия. Обычно используется вместе с элементами управления ActiveX
Control | Указывает, что составной класс является элементом управления
Application Object | Указывает, что составной класс помещен во внешний (out-of-process) сервер (ЕХЕ). Используется исключительно с серверами автоматизации

Вкладка Members в описании составного класса
Во вкладке Members в описании составного класса можно добавлять и удалять интерфейсы и перечисления, которьк составляют класс СОМ. В рассматриваемой вкладке содержится следующая информация.

- Имена интерфейсов и диспинтерфейсов, которые реализованы в классе СОМ.
- Идентификаторы GUID интерфейсов и диспинтерфейсов, реализованных в классе СОМ.
- Указания, является ли интерфейс или диспинтерфейс источником сообщений.
- Указания, является ли интерфейс или диспинтерфейс программируемым интерфейсом, используемым в языке программирования макросов, таких как Word Basic, Visual Basic, Delphi, Object PAL и Excel Basic.
- Указания, запрещено ли использование интерфейса или диспинтерфейса в языках программирования макросов таких как Word Basic, Visual Basic, Delphi, Object PAL и Excel Basic.

Чтобы добавить интерфейсы в составной класс или удалить их, нужно щелкнуть правой кнопкой мыши в облает вкладки Members. На экране появится контекстное меню, в котором нужно выбрать команду Insert Interface или Remove Interface. С помощью контекстного меню можно также установить флаги Source, Default и Restricted. Новые интерфейсы можно выбирать из текущей библиотеки или из библиотек, на которые ссылается текущая библиотека типов.