Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以从.NET interop中的接口指针确定基础COM组件类型?_C#_.net_Com_Com Interop - Fatal编程技术网

C# 是否可以从.NET interop中的接口指针确定基础COM组件类型?

C# 是否可以从.NET interop中的接口指针确定基础COM组件类型?,c#,.net,com,com-interop,C#,.net,Com,Com Interop,我正在使用.NET中的COM库。供应商提供了带有文档的主互操作程序集。然而,一个特定的方法返回一个接口指针,但是文档并没有告诉我底层组件的类型是什么(所以我不知道我还可以访问哪些其他接口) 如果我只有一个接口指针,是否可以确定此方法返回的底层组件是什么?一般来说,简单的答案是否。COM总是隐藏底层对象,它不像C#那样具有refection 如果您拥有创建它的代码,当然可以跟踪,或者对象可能会告诉您。此外,您还可以尝试一些技巧,比如检查进程中加载的DLL,查询所有接口,但这一切都取决于您的具体问题

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


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

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


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

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


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

不,除了尝试之外,没有其他方法可以找到答案。实际尝试的一个有用的开始是文档。这是COM的一个核心设计特性,实现被小心地隐藏在接口后面


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

不,除了尝试之外,没有其他方法可以找到答案。实际尝试的一个有用的开始是文档。这是COM的一个核心设计特性,实现被小心地隐藏在接口后面


在.NET中没有真正的不同,除了反射解决方案,您不应该使用它。

这篇MSDN杂志文章(包括VB源代码)可能很有用:。

这篇MSDN杂志文章(包括VB源代码)可能很有用:。

如果你能猜出它可能是什么,你可以问它是否能做到这一点,看看它会回答什么。请参阅接口的QueryInterface方法。事实上,它不会强制转换自身,它可能会从它的内部对象返回一些实现,或者从它根据需要生成的其他辅助对象返回一些实现,等等


还可以查看它是否实现ITypeInfo或IDispatch,并利用它们。请参阅Groverby已经提到的链接:

如果您能猜出它可能是什么,您可以询问它是否可以将自己转换为该链接,并查看它的回复。请参阅接口的QueryInterface方法。事实上,它不会强制转换自身,它可能会从它的内部对象返回一些实现,或者从它根据需要生成的其他辅助对象返回一些实现,等等

还可以查看它是否实现ITypeInfo或IDispatch,并利用它们。请参阅已经提到的Groverby链接: