Библиотеки типов — это составные документы 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 — все флаги библиотеки типов.
Атрибут | Описание |
Name | Имя библиотеки типов |
GUID | Глобально уникальный 128-разрядный идентификатор библиотеки типов |
Version | Версия библиотеки типов, записанная в формате п.т, где п — старший и т — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535 |
LCID | Идентификатор места действия (locale), описывающий один национальный язык, который используется для всех текстовых строк в библиотеке типов и ее элементах |
Help String | Краткое описание библиотеки. Настоятельно рекомендуется указывать эту строку во всех созда-ваемых библиотеках |
Help File | Имя файла справки, связанной с библиотекой типов |
Help Context | Идентификатор контекста справки библиотеки типов |
Флаг | Описание |
None | Флаги не установлены |
Restricted | Запрещает использовать библиотеку типов в средах программирования макросов, таких как Visual Basic |
Control | Указывает, что библиотека содержит элемент управления, который будет использован на стороне сервера для порождения новых библиотек типов и классов составных объектов (CoClass) |
Hidden | Указывает, что библиотека существует, но не должна быть показана в пользовательских броузерах |
Перечисления
(Enum) в библиотеках типов
Перечисления в библиотеках типов практически не
отличаются от перечислений языка Object Pascal. Перечисление в библиотеке
типов — это коллекция связанных констант, используемая как тип данных во
всех остальных элементах библиотеки для определения свойств или методов.
Кроме того, в зависимости от среды программирования константы перечисления
могут использоваться с объектом ActiveX внутри среды программирования.
В следующих двух разделах рассматривается назначение вкладок Attributes
и Members в описании перечислений.
Вкладка
Attributes в описании перечисления
На рис. 3.2 показано перечисление (Enum), выбранное
в окне редактора библиотек типов Delphi с вкладкой Attributes в правой
части окна редактора. В табл. 3.3 перечислены все возможные атрибуты, которые
можно использовать с перечислением.
Атрибут | Описание |
Name | Имя перечисления |
GUID | 128-разрядный идентификатор GUID-перечисления |
Help String | Краткое описание перечисления. Настоятельно рекомендуется указывать эту строку во всех создаваемых библиотеках |
Help Context | Идентификатор контекста справки по перечислению |
Version | Версия библиотеки типов, записанная в формате п.т, где n — старший и m — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535 |
<Имя константы> = <Значение константы>;
helpstring = 'Строка описания';
Настоятельно рекомендуется указывать строку описания
для членов перечисления, так как приложения, использующие ваш объект СОМ,
могут зависеть от строк описания. На рис. 3.3 показана вкладка Members
описания перечисления.
Элементы
Interface и Displnterface в библиотеках типов
Интерфейс в библиотеке типов — это коллекция определении
свойств и методов. Клиент может получить доступ к интерфейсам либо посредством
таблицы виртуальных методов, либо с помощью специального интерфейса OLE
I Dispatch, который позволяет использовать свойства и методы объектов через
уникальный идентификатор или DispID. Элемент Displnterface определяет интерфейс,
доступ к которому можно получить только через интерфейс IDispatch. Двойной
интерфейс (dual interface) — это интерфейс, доступ к которому можно получить
и через таблицу виртуальных методов, и через интерфейс IDispatch. В следующих
двух разделах рассматривается назначение вкладок Attributes и Members в
описании интерфейсов.
Вкладка Attributes в
описании интерфейса
На рис. 3.4 показан интерфейс, выбранный в окне
редактора библиотек типов, с вкладкой Attributes в правой части окна редактора.
В табл. 3.4 перечислены все возможные атрибуты, которые можно использовать
в описании интерфейса, а в табл. 3.5 — все флаги, используемые в описании
интерфейса.
Атрибут | Описание |
Name | Имя перечисления |
GUID | 128-разрядный идентификатор GUID-перечисления |
Help | String Краткое описание перечисления. Настоятельно рекомендуется указывать эту строку во всех создаваемых библиотеках |
Help Context | Идентификатор контекста справки по перечислению |
Version | Версия библиотеки типов, записанная в формате п.т, где п — старший и т — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535 |
Parent Interface | Имя интерфейса, являющегося базовым классом для выбранного интерфейса. Этот атрибут не применяется для интерфейсов Displnterface |
Таблица 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.
Вкладка
Attributes в описании свойств и методов интерфейса
На рис. 3.6 показано свойство интерфейса, выбранное
в окне редактора библиотек типов, с вкладкой Attributes в правой части
окна редактора. В табл. 3.6 перечислены все атрибуты, которые используются
в определении членов интерфейса, а в табл. 3.7 — все возможные флаги.
Атрибут | Описание |
Declaration | Объявление свойства или метода |
ID | Значение идентификатора DispID |
Help String | Краткое описание свойства или метода |
Help Context | Идентификатор контекста справки по свойству или методу |
Флаг | Описание |
Restricted | Запрещает использовать библиотеку типов в средах программирования макросов, таких как Visual Basic |
Source | Указывает, что член возвращает объект или значение типа VARIANT, являющееся источником событии |
Bindable | Указывает, что свойство поддерживает связывание (binding) данных |
Request Edit | Указывает, что свойство поддерживает сообщение OnRequestEdit |
Display Bindable | Указывает, что свойство должно быть показано пользователю как поддерживающее связывание данных (bindable) |
Default Bindable | Указывает на одно поддерживающее связывание данных свойство, которое наилучшим образом представляет объект |
Hidden | Указывает, что интерфейс существует, но не должен быть показан в пользовательских броузерах |
Вкладка
Attributes в описании классов составных объектов
В табл. 3.8 перечислены все атрибуты, а в табл.
3.9 — флаги, которые используются в описаниях составных классов.
Атрибут | Описание |
Name | Имя составного класса (CoClass) |
GUID | Уникальный 128-разрядный идентификатор GUID составного класса (CoClass) |
Help String | Краткое описание составного класса. Настоятельно рекомендуется указывать эту строку во всех создаваемых библиотеках |
Help Context | Идентификатор контекста справки по составному классу |
Version | Версия библиотеки типов, записанная в формате п. т, где n — старший и m — младший номера версии. В качестве номера версии может использоваться и единичное целое число. В качестве старшего и младшего номеров версий можно использовать числа от 0 до 65 535. |
Флаг | Описание |
Licensed | Указывает, что во время разработки и выполнения требуется лицензия. Обычно используется вместе с элементами управления ActiveX |
Control | Указывает, что составной класс является элементом управления |
Application Object | Указывает, что составной класс помещен во внешний (out-of-process) сервер (ЕХЕ). Используется исключительно с серверами автоматизации |
Вкладка Members
в описании составного класса
Во вкладке Members в описании составного класса
можно добавлять и удалять интерфейсы и перечисления, которьк составляют
класс СОМ. В рассматриваемой вкладке содержится следующая информация.