Элементы Interface и Displnterface в библиотеках типов
Интерфейс в библиотеке типов - это коллекция определении свойств и методов. Клиент может получить доступ к интерфейсам либо посредством таблицы виртуальных методов, либо с помощью специального интерфейса OLE I Dispatch, который позволяет использовать свойства и методы объектов через уникальный идентификатор или DispID. Элемент Displnterface определяет интерфейс, доступ к которому можно получить только через интерфейс IDispatch. Двойной интерфейс (dual interface) - это интерфейс, доступ к которому можно получить и через таблицу виртуальных методов, и через интерфейс IDispatch. В следующих двух разделах рассматривается назначение вкладок Attributes и Members в описании интерфейсов.
Вкладка Attributes в описании интерфейса
В таблице 3.4 перечислены все возможные атрибуты, которые можно использовать в описании интерфейса, а в таблице 3.5 - все флаги, используемые в описании интерфейса.
Таблица 3.4. Атрибуты интерфейсов в библиотеках типовАтрибут | Описание | 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 предпочитают использовать параметризованные свойства вместо методов.
Если для описания интерфейса используется инструкция Displnterface, то для определения методов и свойств интерфейса можно использовать только совместимые с автоматизацией OLE типы данных. Совместимыми с OLE являются следующие типы данных: Byte, Smallint, Integer, Single, Double, Currency, TDateTime, WideString, WordBool и OleVariant. Для передачи многомерных структур данных можно использовать массивы данных типа OleVariant.
Вкладка Attributes в описании свойств и методов интерфейса
В таблице 3.6 перечислены все атрибуты, которые используются в определении членов интерфейса, а в таблице 3.7 - все возможные флаги.
Таблица 3.6. Атрибуты членов интерфейса в библиотеках типов:Атрибут | Описание | Declaration | Объявление свойства или метода | ID | Значение идентификатора DispID | Help String | Краткое описание свойства или метода | Help Context | Идентификатор контекста справки по свойству или методу |
Таблица 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. Новые интерфейсы можно выбирать из текущей библиотеки или из библиотек, на которые ссылается текущая библиотека типов.
1 2
8 8 8
| |