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

时间:2009-11-18 14:40:57

标签: windows com

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

3 个答案:

答案 0 :(得分:2)

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

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

通过此界面,您可以迭代其中包含的类型。

答案 1 :(得分:2)

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

在COM中,IUnknown上的QueryInterface方法不需要公开它可能返回的接口。你根据它的IID要求一个,你要么得到它。 QI在特定COM对象中的实现差异很大,尽管它应该遵循Microsoft在此描述的模式 - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx

答案 2 :(得分:1)

Dependency Walker可能会为你做好工作......

http://theircorp.byethost11.com/index.php?vw=TypeLib是一个检查TBL文件的免费工具。