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

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

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

在COM中,IUnknown上的QueryInterface方法不需要公开它可能返回的接口。 你根据它的IID要求一个,你要么不明白。 QI在一个特定的COM对象中的实现差别很大,虽然它应该遵循微软在这里描述的模式 – http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx

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

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

通过这个接口,你可以遍历其中包含的类型。