【发布时间】:2010-12-17 21:46:50
【问题描述】:
消费者有没有办法枚举给定 COM 对象实现的所有接口?
【问题讨论】:
消费者有没有办法枚举给定 COM 对象实现的所有接口?
【问题讨论】:
Dependency Walker 可能会为您完成这项工作...
http://theircorp.byethost11.com/index.php?vw=TypeLib 是检查 TBL 文件的免费工具。
【讨论】:
Dependency Walker 不会显示接口,因为唯一的导出是 DllGetClassObject、DllRegisterServer 等(对于 DLL 托管的 COM)。
正如 weismat 所说,您可以检查 TLB 文件。许多 COM 对象在可执行文件的资源部分包含嵌入的类型库。使用资源黑客等工具,您可以提取 TLB 并使用 LoadTypeLib COM 函数来获取指向 ITypeLib 接口的指针(当然,您可以将 LoadTypeLib/LoadTypeLibEx 直接与 COM 或 EXE DLL 一起使用)。
使用此接口,您可以迭代其中包含的类型。
【讨论】:
如果您只是想知道消费者可以调用哪些方法,可以尝试 IDispatch/IDispatchEx。
在 COM 中,IUnknown 上的 QueryInterface 方法不需要公开它可能返回的接口。你根据它的 IID 要求一个,你要么得到它,要么没有。 QI 在特定 COM 对象中的实现差异很大,尽管它应该遵循 Microsoft 在此处描述的模式 - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx。
【讨论】: