是否可以从.NET interop中的接口指针确定底层COM组件类型?

时间:2011-11-09 15:11:10

标签: c# .net com com-interop

我在.NET中使用COM库。供应商为主互操作程序集提供了文档。但是,一个特定的方法返回一个接口指针,但文档没有告诉我底层组件类型是什么(所以我不知道我可以QI的其他接口)。

如果我拥有的是接口指针,是否可以确定从此方法返回的底层组件是什么?

4 个答案:

答案 0 :(得分:3)

不,除了尝试之外别无他法。实际尝试的有用开始需要是文档。这是COM的核心设计特性,实现方式隐藏在接口后面。

在.NET中没有什么不同,除了你不应该使用的反射解决方法。

答案 1 :(得分:2)

一般来说,简单的答案是否定的。 COM总是隐藏底层对象,它没有像C#那样的反思。

如果您拥有创建它的代码,当然您可以跟踪,或者对象可能会告诉您。此外,您可以尝试一些黑客攻击,例如检查进程中加载​​的dll,查询所有接口,但这一切都取决于您的具体问题。

答案 2 :(得分:1)

这篇MSDN杂志文章(包括VB源代码)可能很有用:Inspecting COM Objects With Reflection

答案 3 :(得分:0)

如果你能猜出它可能是什么,你可以问它是否可以将自己投射到那个并看看它的回复。请参阅IUnknown接口的QueryInterface方法。事实上,它不会强制转换,它可能会从它的内部对象返回一些实现,或者从它按需生成的其他辅助对象返回等。

还可以看看它是否实现了ITypeInfo或IDispatch并使用它们。请参阅已提及的链接groverboy:Inspecting COM Objects With Reflection