На самом деле невозможно создать такой инструмент для ЛЮБОГО COM-объекта, возможно, вам повезет с конкретными объектами. Если библиотека типов доступна, вы можете использовать OLEView или вы можете программно открывать и просматривать саму библиотеку типов. Имейте в виду, что содержимое библиотеки типов - это то, что разработчик хотел включить в нее; ничто не мешает объектам, реализующим больше интерфейсов, чем их библиотеки типов, говорят, что они делают.
Для объектов без библиотек типов невозможно создать инструмент общего назначения:
- Учитывая то, как работает
QueryInterface
, вам придется спросить исследуемый объект, поддерживает ли он все возможные интерфейсы. Где такой инструмент может получить список всех возможных интерфейсов, которые может поддерживать данный объект? Хотя это правда, что некоторые интерфейсы зарегистрированы в реестре из-за требований прокси, не все интерфейсы есть, и это ни в коем случае не является обязательным требованием.
- Когда вы знаете, что объект поддерживает данный интерфейс, как вы решаете, какие методы поддерживает этот интерфейс? Если интерфейс является производным от IDispatch, то это возможно, так как это цель
IDispatch
, но для интерфейсов, полученных из IUnknown
, нет способа программно обнаружить что-то об интерфейсе.
У вас также есть дополнительная проблема, заключающаяся в том, что некоторые объекты могут иметь дополнительные интерфейсы, реализованные для них прокси-уровнем, например, если интерфейс был проксирован, вы также сможете QueryInterface
из него перейти к IProxyManager
сам объект не реализует этот интерфейс (это часть прокси).