繁体   English   中英

是否可以从.NET互操作中的接口指针确定基础COM组件类型?

[英]Is it possible to determine the underlying COM component type from an interface pointer in .NET interop?

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

如果我只有接口指针,是否可以确定此方法返回的基础组件是什么?

不,除了尝试,别无他法。 需要进行实际尝试的有用起点是文档。 这是COM的核心设计功能,其实现被仔细隐藏在接口后面。

在.NET中并没有什么不同,除了具有您不应该使用的Reflection解决方法以外。

通常,简单的答案是“否”。 COM总是隐藏基础对象,它没有像C#这样的补充。

如果您拥有创建它的代码,那么您当然可以跟踪,否则该对象可能会告诉您。 另外,您可以尝试一些技巧,例如检查进程中已加载的dll,查询所有界面,但这取决于您的特定问题。

这篇MSDN杂志文章(包括VB源代码)可能会很有用: 使用Reflection检查COM对象

如果您能猜出它可能是什么,可以询问它是否可以将其强制转换为该值,然后查看其答复。 请参见IUnknown接口的QueryInterface方法。 实际上,它本身并不会强制转换,它可能会从其内部对象返回某个实现,也可能会从其他按需生成的辅助对象中返回某个实现。

还可以查看它是否实现ITypeInfo或IDispatch并加以利用。 请参阅已经提到的链接groverboy: 使用反射检查COM对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM