Windows 如何检测COM对象实现的所有接口?

Windows 如何检测COM对象实现的所有接口?,windows,com,Windows,Com,消费者是否有办法枚举给定COM对象实现的所有接口?可能会帮您完成这项工作 是检查TBL文件的免费工具 Dependency Walker不会显示接口,因为唯一的导出是DllGetClassObject、DllRegisterServer等(对于DLL托管的COM) 正如weismat所说,您可以检查TLB文件。许多COM对象在可执行文件的资源部分包含嵌入式TypeLib。使用诸如resource hacker之类的工具,您可以提取TLB并使用LoadTypeLib COM函数获取指向ITypeL

消费者是否有办法枚举给定COM对象实现的所有接口?

可能会帮您完成这项工作


是检查TBL文件的免费工具

Dependency Walker不会显示接口,因为唯一的导出是DllGetClassObject、DllRegisterServer等(对于DLL托管的COM)

正如weismat所说,您可以检查TLB文件。许多COM对象在可执行文件的资源部分包含嵌入式TypeLib。使用诸如resource hacker之类的工具,您可以提取TLB并使用LoadTypeLib COM函数获取指向ITypeLib接口的指针(当然,您可以将LoadTypeLib/LoadTypeLibEx直接用于COM或EXE DLL)


使用此接口,您可以迭代其中包含的类型。

如果您只是想知道哪些方法可以从消费者处调用,可以尝试IDispatch/IDispatchEx


在COM中,IUnknown上的QueryInterface方法不需要公开它可能返回的接口。你根据它的身份证要一个,你要么得到要么得不到。QI在特定COM对象中的实现差异很大,尽管它应该遵循Microsoft在此处描述的模式-。

Dependency Walker是否具有此功能?评估TLB的内容不会公开COM对象可能使用的任何私有接口的信息,虽然要从exe/dll打开类型libs,请使用If not membered bad,但使用IDispatch/IDispatchEx,您将在IDL中捕获具有oleautomation属性的接口。