Как я могу обнаружить все интерфейсы, которые реализует COM-объект? - PullRequest
7 голосов
/ 18 ноября 2009

Может ли потребитель перечислить все интерфейсы, реализованные данным COM-объектом?

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009

Dependency Walker не будет отображать интерфейсы, так как единственными объектами экспорта являются DllGetClassObject, DllRegisterServer и т. Д. (Для COM, размещенного в DLL).

Вы можете, как говорит Вейсмат, проверять файлы TLB. Многие COM-объекты содержат встроенные библиотеки типов в разделе ресурсов исполняемого файла. С помощью такого инструмента, как хакер ресурсов, вы можете извлечь TLB и использовать COM-функции LoadTypeLib для получения указателя на интерфейс ITypeLib (вы можете использовать LoadTypeLib / LoadTypeLibEx напрямую с COM или EXE DLL, конечно).

С этим интерфейсом вы можете перебирать типы, содержащиеся в.

2 голосов
/ 19 ноября 2009

Вы можете попробовать IDispatch / IDispatchEx, если вы просто хотите узнать, какие методы можно вызвать у вашего потребителя.

В COM метод QueryInterface в IUnknown не требуется для представления, какие интерфейсы он может возвращать. Вы запрашиваете один на основе его IID, и вы либо получаете его, либо нет. Реализация QI в конкретном COM-объекте значительно варьируется, хотя предполагается, что он следует шаблону, описанному здесь Microsoft - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx.

1 голос
/ 18 ноября 2009

Ходок за зависимостями может выполнить эту работу за вас ...

http://theircorp.byethost11.com/index.php?vw=TypeLib - бесплатный инструмент для проверки файлов TBL.

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