Visual Studio 2010 — C ++ Как получить COM-объект Progid Coclass во время выполнения

Мне нужно написать функцию, которая динамически извлекает progid из COM-объекта.

Это возможно?

Какой лучший способ сделать это?

РЕДАКТИРОВАТЬ: Все коклассы, которые мне нужны для обработки, реализуют IProvideClassInfo

3

Решение

Прежде всего, нет никакой гарантии, что информация доступна в первую очередь. Даже если вы только что создали экземпляр объекта, используя ProgID, вы можете не вернуть его обратно.

Самый простой — это запросить один из IPersist и друзья (IPersistStream и т.д.) интерфейсы и вызов IPersist::GetClassID чтобы получить CLSID, Затем преобразовать в ProgID, используя ProgIDFromCLSID или через поиск в реестре.

Другой вариант — запросить IProvideClassInfo а также IProvideClassInfo2 получить доступ к CLSID, представляющему интерес, таким альтернативным способом.

Третий вариант, если ни один из двух выше не работал, это запрос IDispatch и попытаться открыть библиотеку типов, а затем перебрать поиск информации о классах.

5

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector