首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于反射的System.__ComObject在C#中的转换

基于反射的System.__ComObject在C#中的转换
EN

Stack Overflow用户
提问于 2010-01-28 02:17:53
回答 2查看 9.2K关注 0票数 5

我试图使用反射将System.__ComObject转换为接口类型。我尝试过使用Convert.ChangeType(Object,Type),但是c#随后抛出了这个错误:

System.InvalidCastException:对象必须实现IConvertible。

那么,有没有可能使用反射将通用__ComObject转换成正确的类型,这样我就可以通过反射调用它的方法了吗?是的,它必须通过一种方法来完成,这种方法不需要提前告诉编译器对象类型是什么!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-28 03:54:39

一般情况下,不。

_ComObject需要实现.Net运行时所知道的接口。这要么是从QueryInterfaceIDispatch获得的接口。

如果是前者,则必须知道接口是什么,然后必须使用接口上的.Net描述接口。

如果COM对象实现了IDispatch,则可以在其上动态调用成员。在.Net 4.0和更高版本中,使用dynamic关键字可以很容易地做到这一点。如果您使用的是较早版本的.Net,则可以对GetType()返回的类型调用InvokeMember(),或者将其转换为IReflect,并使用该接口调用方法。

最好的情况是,如果您为COM对象获得了一个运行时可调用包装器(RCW),可以自己在COM库上运行tlbimp.exe,或者为它获取一个主互操作程序集(PIA),通常是从COM库作者那里获得。

票数 7
EN

Stack Overflow用户

发布于 2010-01-28 03:45:18

要使任何对象都是类型类型,您需要确保它属于该特定类型。您可以首先通过使用"is“操作符来验证这一点。http://msdn.microsoft.com/en-us/library/scekt9xw%28VS.71%29.aspx

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2151861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档