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

на главную

Жанры

Сущность технологии СОМ. Библиотека программиста
Шрифт:

[object, uuid(0002E012-0000-0000-C000-000000000046)]

interface ICatRegister : IUnknown {

// description info for a category

// описательная информация для категории

typedef struct tagCATEGORYINFO

{ CATID catid; LCID lcid; OLECHAR szDescription[128]; }

CATEGORYINFO;

// register cCts category descriptions

// регистрируем описания категории cCts

HRESULT RegisterCategories([in] ULONG cCts,

[in, size_is(cCts)] CATEGORYINFO rgCatInfo[]);

// unregister cCategories category descriptions

//

отменяем регистрацию описаний категории

cCategories HRESULT UnRegisterCategories([in] ULONG cCategories,

[in, size_is(cCategories)] CATID rgcatid[]);

// indicate a class implements one or more categories

// показываем, что класс реализует одну или более категорий

HRESULT RegisterClassImplCategories([in] REFCLSID rclsid,

[in] ULONG cCategories,

[in, size_is(cCategories)] CATID rgcatid[]);

// deindicate a class implements one or more categories

// перестаем показывать, реализует класс одну или более категорий

HRESULT UnRegisterClassImplCategories([in] REFCLSID rclsd,

[in] ULONG cCategories,

[in, size_is(cCategories)] CATID rgcatid[]);

// indicate a class requires one or more categories

// показываем, что класс требует одну или более категорий

HRESULT RegisterClassReqCategories([in] REFCLSID rclsid,

[in] ULONG cCategories,

[in, size_is(cCategories)] CATID rgcatid[]):

// deindicate a class requires one or more categories

// перестаем показывать, требует ли класс одну или более категорий

HRESULT UnRegisterClassReqCategones([in] REFCLSID rclsid,

[in] ULONG cCategories,

[in, size_is(cCategories)] CATID rgcatid[]); }

Для определяемых пользователем СОМ-классов нет необходимости реализовывать этот интерфейс. Он существует единственно для того, чтобы серверы смогли сами зарегистрировать свои категории компонентов с использованием реализации предоставляемого СОМ менеджера категорий компонентов.

В случае примера с Chimp следующий код зарегистрирует правильную информацию о каждой категории:

// get the standard category manager

// получим стандартный менеджер категорий

ICatRegister *pcr = 0; HRESULT hr = CoCreateInstance(

CLSID_StdComponentCategoriesMgr, 0,

CLSCTX_ALL, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) {

// build descriptions of each category

// формируем описания каждой категории

CATECORYINFO rgcc[4];

rgcc[0].catid = CATID_Simian;

rgcc[1].catid = CATID_Mammal;

rgcc[2].catid = CATID_HasOxygen;

rgcc[3].catid = CATID_HasWater;

rgcc[0].lcid = rgcc[1].lcid = rgcc[2].lcid = rgcc[3].lcid = 0х409;

wcscpy(rgcc[0].szDescription, OLESTR(«Eats Bananas»));

wcscpy(rgcc[1].szDescription, OLESTR(«Bears live young»));

wcscpy(rgcc[2].szDescription, OLESTR(«Provides Oxygen»));

wcscpy(rgcc[3].szDescription, OLESTR(«Provides Water»));

// register information regarding categories

//

регистрируем информацию о категориях

pcr->RegisterCategories(4, rgcc);

// note that Chimps are Simians and mammals

// отметим, что Chimps (шимпанзе) являются Simian

// (обезьянами) и Mammal (млекопитающими)

CATID rgcid[2];

rgcid[0] = CATID_Simian;

rgcid[1] = CATID_Mammal;

pcr->RegisterClassImplCategories(CLSID_Chimp, 2, rgcid);

// note that Chimps require Oxygen and Water

// отметим, что Chimps (шимпанзе) нуждаются

// в кислороде (Oxygen) и воде (Water)

rgcid[0] = CATID_HasOxygen;

rgcid[1] = CATID_HasWater;

pcr->RegisterClassReqCategories(CLSID_Chimp, 2, rgcid);

pcr->Release; }

Заметим, что в этом коде не делается обычных вызовов реестровых API-функций, а вместо них для обработки реестра используется стандартный менеджер категорий.

Кроме того, стандартный менеджер категорий позволяет приложениям запрашивать реестр найти информацию о категориях. Эта функциональная возможность предоставляется через интерфейс ICatInformation:

[object, uuid(0002E013-0000-0000-C000-000000000046)]

interface ICatInformation : IUnknown

{

// get list of known categories

// получаем список известных категорий

HRESULT EnumCategories([in] LCID lcid, [out] IEnumCATEGORYINFO** ppeci);

// get description of a particular category

// получаем описание определенной категории

HRESULT GetCategoryDesc([in] REFCATID rcatid, [in] LCID lcid, [out] OLECHAR ** ppszDesc);

// get list of classes compatible with specified categories

// получаем список классов, совместимых с указанными категориями

HRESULT EnumClassesOfCategories(

[in] ULONG cImplemented,

// -1 indicates ignore

// (-1) означает игнорировать

[in,size_is(cImplemented)] CATID rgcatidImpl[], [in] ULONG cRequired,

// -1 indicates ignore

// (-1) означает игнорировать

[in,size_is(cRequired)] CATID rgcatidReq[], [out] IEnumCLSID** ppenumClsid);

// verify class is compatible with specified categories

// проверяем, совместим ли класс с указанными категориями

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

Неправильный боец РККА Забабашкин 3

Арх Максим
3. Неправильный солдат Забабашкин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Неправильный боец РККА Забабашкин 3

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга III

Прорвемся, опера! Книга 4

Киров Никита
4. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 4

Хозяйка забытой усадьбы

Воронцова Александра
5. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка забытой усадьбы

Владыка морей ч.1

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

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Золотой ворон

Сакавич Нора
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Золотой ворон

Антимаг его величества. Том II

Петров Максим Николаевич
2. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества. Том II

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Я тебя не предавал

Бигси Анна
2. Ворон
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Я тебя не предавал

Русь. Строительство империи

Гросов Виктор
1. Вежа. Русь
Фантастика:
альтернативная история
рпг
5.00
рейтинг книги
Русь. Строительство империи

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Прорвемся, опера!

Киров Никита
1. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера!