通过reflection在C#中转换System .__ ComObject

我正在尝试使用reflection将System.__ComObject为接口类型。 我尝试过使用Convert.ChangeType(Object,Type)但c#然后抛出此错误:

System.InvalidCastException:Object必须实现IConvertible。

那么是否有任何可能的方法将使用reflection的一般__ComObject转换为正确的类型,以便我可以通过reflection调用它的方法? 是的,它必须通过一种方法来完成,该方法不涉及提前告诉编译器对象类型是什么!

一般来说,没有。

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

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

如果COM对象实现了IDispatch ,则可以动态调用其上的成员。 在.Net 4.0及更高版本中,可以使用dynamic关键字轻松完成此操作。 如果您使用的是早期版本的.Net,则可以在GetType()返回的类型上调用InvokeMember() ,或者将其IReflectIReflect并使用该接口调用方法。

最好的情况是,如果您获得COM对象的运行时可调用包装器(RCW),可以通过在COM库上自行运行tlbimp.exetlbimp.exe获取主互操作程序集(PIA),通常来自COM库作者。

对于要进行类型转换的任何对象,您需要确保它属于该特定类型。 您可以通过使用“is”运算符进行检查来validation这一点。 http://msdn.microsoft.com/en-us/library/scekt9xw%28VS.71%29.aspx