发一篇以前写的一个旧文,申请Blog好久了,要是再不发东西可就被Kill了。通过反射调用COM对象
      在.net中使用Com对象大家第一个反应就是在工程中引用Com对象,让vs.net自动生成一个包装过的.net类库。这种方法虽然方便,但是有很明显的缺点,最致命的就是开发的机器上安装的Com对象的版本比客户机器上安装的高,开发的程序无法正确的运行。如开发机器安装的是office 2003,而客户机器上的安装的确是office 2000、office xp甚至还有安装的是Office97,这种情况我想大家都深有体会吧?    
      在非托管语言如Delphi中可以通过CreateComObject来生成一个Com对象,然后再使用Variant对象去调用Com对象的属性、方法。可因C#是一种强类型的语言,他没有象Delphi中的Variant这中可变类型,因此只能通过反射去完成。
      晚上心血来潮就封装了一个Variant对象来模拟一下Delphi中的Variant。

 示例代码:

通过反射调用COM对象            //生成Excel对象
通过反射调用COM对象
            using (Variant excel = Variant.CreateComInstance("Excel.Application"))
            }


这样的方式是不是爽多了?那些讨厌的可选参数终于不用再写了!

 

Variant类源码:

 

 

其实Varaint类不光可以调用Com对象,对于托管对象也可以动态的创建和调用。

欢迎大家斧正!

相关文章: