Чтение онлайн

на главную

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №6
Шрифт:

После описания всех интерфейсов описывается библиотека типов (ключевое слово library). В качестве атрибутов для библиотеки типов задаются уникальный идентификатор (GUID, который можно получить с помощью guidgen.exe), номер версии и helpstring.

Оператор importlib ("stdole32.tlb") должен быть первым среди всех операторов библиотеки. Он задает импорт стандартной двоичной библиотеки типов stdole32.tlb.

Далее описываются все коклассы, включаемые в данный

компонент. Для каждого кокласса с помощью атрибута uuid задается его GUID и перечисляются все его интерфейсы (последние в иерархии интерфейсов). Один из интерфейсов каждого кокласса объявляется как интерфейс по умолчанию (с помощью атрибута default). Это необходимо для Visual Basic. При инициализации экземпляра данного класса именно ссылка на интерфейс по умолчанию будет возвращена клиенту. При отсутствии атрибута default, интерфейсом по умолчанию становится первый интерфейс в списке интерфейсов данного кокласса.

В данном примере отражены далеко не все возможности языка IDL и некоторые из них будут обсуждены далее. А сейчас рассмотрим использование сформированного idl-файла.

Добавим файл PubInProcServerTypeInfo.idl В проект PubInProcServer и откомпилируем. В результате будут получены несколько файлов. Для сервера в процессе клиента, который мы реализуем в данное время, прокси и заглушка не нужны. В связи с этим включим в проект из всех файлов, сгенерированных транслятором MILD, только PubInProcServerTypeInfo.h, содержащий определения всех интерфейсов на С++/С, и файл PubInProcServerTypeInfo_i.с, содержащий определения уникальных идентификаторов для всех интерфейсов и коклассов.

Далее надо модифицировать часть файлов проекта. Прежде всего из проекта удаляются все ранее использовавшиеся файлы, определявшие интерфейсы и GUID. Это файлы IPub.h, IBook,h, IJournal.h, iid.h, iid.cpp. Во всех оставшихся файлах надо удалить ссылки на удаленные файлы. В файлы CоBооk.h, CоJournal.h надо добавить строку

#include "PubInProcServerTypeInfo.h"

Аналогичные изменения необходимо сделать в клиенте CoPubClient.

Последнее действие — добавление новых данных в реестр. Именно, надо зарегистрировать библиотеку типов — PubInProcServerTypeInfo.tlb. Для этого в реестр системы необходимо внести следующую информацию:

• Под ключом HKEY_CLASSES_ROOT TypeLib надо создать раздел

{68A702C2-8283-11d5-98C7-000001223694} — GUID библиотеки ТИПОВ.

• Для нового раздела создать подраздел 1.0 — номер версии. В качестве значения параметра по умолчанию можно взять название компонента — PubInProcServer.

• Для только что созданного раздела 1.0 создать подраздел 0 — идентификатор языка (естественного).

• Для только что созданного раздела 0 создать 3 подраздела:

? Win32 — в качестве значения параметра по умолчанию надо указать путь к библиотеке типов (к файлу PubInProcServerTypeInfo.tlb)

? FLAGS — значение параметра по умолчанию ''0"

? HELPSTRING — значение параметра по умолчанию — путь к файлу помощи (если таковой имеется)

• И последнее, ссылку на библиотеку типов надо разместить под ключами

НКЕY_CLASSЕS_ROOT CLSID {49F00760-7238-11d5-98С7-000001223694} и

НКЕY_CLASSЕS_ROOT CLSID {49F00761-7238-11d5-98C7-000001223694}.

Для этого под указанными ключами создаются разделы TypeLib, где в качестве значения параметра по умолчанию указывается GUID библиотеки типов для компонента, в котором размещены оба класса.

Теперь компонент, созданные в проекте PubInProcServer, включает библиотеку типов PubInPrосServerTуреInfj.tlb и, следовательно, может использоваться клиентами, реализованными на других языках, поддерживающих СОМ. Например, в Visual Basic достаточно установить ссылку на библиотеку типов нашего компонента и можно создавать экземпляры коклассов CоBооk и CоJournal, получая по умолчанию ссылки на интерфейсы IBook и IJournal.

Для проверки того, что сформированная библиотека типов PubInPrосServerTуреInfj.tlb действительно содержит всю информацию, содержавшуюся ранее в idl-файле PubIinProcServerTypeInfo.idl, можно воспользоваться OLE/COM Object Viewer, С ПОМОЩЬЮ которого МОЖНО увидеть все классы ИЗ компонента PubinProcServer, их интерфейсы, методы этих интерфейсов и их сигнатуры.

Далее надо иметь ввиду, что разработка любого компонента должна начинаться с формирования соответствующего idl-файла. Нарушение этого требования в данном случае определялось методическими задачами.

Библиотека типов доступна для чтения не только OLE/COM Object Viewer. Имеются интерфейсы ITypeLib и ITypeInfо с большим числом методов, с помощью которых можно получить любую информацию из зарегистрированной в реестре библиотеке типов.

Интерфейс ITypeLib используется при получении информации общего характера о библиотеке типов. Интерфейс ITypeInfо позволяет получить информацию о каждом отдельном объекте, описанном в библиотеке типов.

Рассмотрим следующую задачу — по заданному GUID библиотеки типов вывести описание (helpstring) для всех описанных в библиотеке объектов.

// test.срр — чтение библиотеки типов PublnProcServerTypelnfо. tlb

#include <iostream.h>

#include <windows.h>

const GUID LIBID_PubInProcServer =

{0x68A7 02C2, 0x828 3, 0x11D5,

{0x98, 0xC7, 0x00, 0x00, 0x01, 0x22, 0x36, 0x94}};

int main

{

int count;

HRESULT hr;

Поделиться:
Популярные книги

Внешняя Зона

Жгулёв Пётр Николаевич
8. Real-Rpg
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Внешняя Зона

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Титан империи 7

Артемов Александр Александрович
7. Титан Империи
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Титан империи 7

Инферно

Кретов Владимир Владимирович
2. Легенда
Фантастика:
фэнтези
8.57
рейтинг книги
Инферно

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Фараон

Распопов Дмитрий Викторович
1. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Фараон

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Новый Рал 8

Северный Лис
8. Рал!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Новый Рал 8

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Смерть может танцевать 4

Вальтер Макс
4. Безликий
Фантастика:
боевая фантастика
5.85
рейтинг книги
Смерть может танцевать 4

Не ангел хранитель

Рам Янка
Любовные романы:
современные любовные романы
6.60
рейтинг книги
Не ангел хранитель

Релокант. Вестник

Ascold Flow
2. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. Вестник