我正在尝试System.__ComObject使用反射转换为接口类型.我尝试过使用Convert.ChangeType(Object,Type)c#然后抛出此错误:
System.InvalidCastException:Object必须实现IConvertible.
那么有没有可能的方法将一般__ComObject 使用反射转换为正确的类型,以便我可以通过反射调用它的方法?是的,它必须通过一种方法来完成,该方法不涉及提前告诉编译器对象类型是什么!
一般来说,没有.
_ComObject需要实现.Net运行时知道的接口.这将是您从QueryInterface或获得的接口IDispatch.
如果它是前者,您必须知道接口是什么,然后您必须使用接口上的ComImportAttribute描述.Net 的接口.
如果COM对象实现IDispatch,则可以动态调用其上的成员.在.Net 4.0及更高版本中,可以使用dynamic关键字轻松完成此操作.如果您使用的是早期版本的.Net,则可以调用InvokeMember()返回的类型GetType()或者IReflect使用该类型接口来调用方法.
最好的情况是,如果您获得COM对象的Runtime Callable Wrapper(RCW),可以通过tlbimp.exe在COM库上运行自己或为它获取主Interop程序集(PIA),通常来自COM库作者.
| 归档时间: |
|
| 查看次数: |
8463 次 |
| 最近记录: |