Невозможно найти UIRibbon в компонентной службе или OleView

Недавно я изучал, как использовать COM в c ++, и наткнулся на простой код ленты.

Код имеет:

HRESULT hr = CoCreateInstance(CLSID_UIRibbonFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&g_pFramework));

Итак, он основан на COM, верно? В Службе компонентов должна быть некоторая информация об этом компоненте, но я все равно не могу ее найти.

Мой вопрос заключается в том, как Windows удается найти COM-компонент с соответствующим CLSID, указанным в заголовочном файле (UIRibbon.h)?

0

Решение

как windows удается найти COM-компонент с соответствующим CLSID

CoCreateInstance:

Функция CoCreateInstance предоставляет удобный ярлык, подключаясь к объекту класса, связанному с указанным CLSID, создавая неинициализированный экземпляр и освобождая объект класса. Как таковой, он включает в себя следующую функциональность: CoGetClassObject

CoGetClassObject:

Вызов CoGetClassObject создает, инициализирует и предоставляет вызывающей стороне доступ (через указатель на интерфейс, указанный в параметре riid) к объекту класса. Объект класса — это объект, связанный с CLSID, который вы указываете в параметре rclsid. Подробная информация о том, как система находит связанный код и данные на компьютере, прозрачна для вызывающей стороны., как и динамическая загрузка любого кода, который еще не загружен.

[…]

Есть два места, чтобы найти CLSID для класса:
(1) Реестр содержит связь между идентификаторами CLSID и суффиксами файлов, а также между идентификаторами CLSID и сигнатурами файлов для определения класса объекта.
(2) Когда объект сохраняется в постоянном хранилище, его CLSID сохраняется вместе с его данными.

Как говорится в MSDN, поиск прозрачен для вызывающей стороны и включает в себя несколько источников: некоторые CLSID могут быть явно зарегистрированы серверами и являются приоритетными для поиска, затем существует реестр COM-классов для каждого пользователя, реестр для всей машины, записи «Treat As» и т. Д. ,

Предположительно, наиболее частым сценарием является следующий. COM-сервер (приложение или DLL) регистрирует свои CLSID в системном реестре как часть своей установки. Тогда системный реестр содержит запись под HKEY_CLASSES_ROOT который содержит информацию о конкретных CLSID и как найти код, связанный с ним. затем CoCreateInstance и друзья просматривают эту информацию по запросу вызывающего абонента и делают волшебство, позволяющее вызывающему получить указатель вызываемого интерфейса для запрашиваемого CLSID.

Это, в частности, случай CLSID_UIRibbonFramework, с соответствующей информацией в реестре под HKEY_CLASSES_ROOT\CLSID\{926749fa-2615-4987-8845-c33e65f2b957},

0

Другие решения


По вопросам рекламы [email protected]