Дамп интерфейса, представленного COM-объектом - PullRequest
4 голосов
/ 02 декабря 2009

Я хочу найти инструмент, который может видеть весь интерфейс, включая методы, свойства, события, предоставляемые компонентом COM (или ActiveX). Доступен ли такой инструмент?

Ответы [ 2 ]

5 голосов
/ 02 декабря 2009

На самом деле невозможно создать такой инструмент для ЛЮБОГО COM-объекта, возможно, вам повезет с конкретными объектами. Если библиотека типов доступна, вы можете использовать OLEView или вы можете программно открывать и просматривать саму библиотеку типов. Имейте в виду, что содержимое библиотеки типов - это то, что разработчик хотел включить в нее; ничто не мешает объектам, реализующим больше интерфейсов, чем их библиотеки типов, говорят, что они делают.

Для объектов без библиотек типов невозможно создать инструмент общего назначения:

  • Учитывая то, как работает QueryInterface, вам придется спросить исследуемый объект, поддерживает ли он все возможные интерфейсы. Где такой инструмент может получить список всех возможных интерфейсов, которые может поддерживать данный объект? Хотя это правда, что некоторые интерфейсы зарегистрированы в реестре из-за требований прокси, не все интерфейсы есть, и это ни в коем случае не является обязательным требованием.
  • Когда вы знаете, что объект поддерживает данный интерфейс, как вы решаете, какие методы поддерживает этот интерфейс? Если интерфейс является производным от IDispatch, то это возможно, так как это цель IDispatch, но для интерфейсов, полученных из IUnknown, нет способа программно обнаружить что-то об интерфейсе.

У вас также есть дополнительная проблема, заключающаяся в том, что некоторые объекты могут иметь дополнительные интерфейсы, реализованные для них прокси-уровнем, например, если интерфейс был проксирован, вы также сможете QueryInterface из него перейти к IProxyManager сам объект не реализует этот интерфейс (это часть прокси).

3 голосов
/ 02 декабря 2009

Если у компонента есть библиотека типов (в ресурсах или поставляется отдельно), вы можете использовать OLE View, который поставляется с Visual Studio. Вы должны использовать «View Typelib», а не «Bind to File».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...