当前位置:首页 > 技术心得 > 正文内容

C#中实现VB中的CreateObject方法

xjtudll4年前 (2022-03-30)技术心得6850

经常看到有些VB的例子中直接用个CreateObject就可调用系统功能(大多是COM对象),像用户设定,网络设定等等。虽然C#中可以通过使用VB的命名空间的方法来调用CreateObject函数,但是这样比较没什么用,因为生成的对象的所带有的方法都不能使用。C#中还可以直接用添加引用的方式来调用一些对象,前提是你知道该添加哪个引用。当我上网搜索,已经搜索到很多VB的成功用CreateObject调用的例子,C#的例子却很难找到的时候,就干脆用类似VB的方法算了,很简单。免得继续在网络中大海捞针了。C#中类似 CreateObject 的方法就是 System.Activator.CreateInstance.  后续的对象函数的调用可以通过InvokeMember方法来实现。

如在VB中的源代码如下:
这种方式叫Late-Bind,关于早期绑定和后期绑定的区别见
http://msdn2.microsoft.com/zh-cn/library/0tcf61s1(VS.80).aspx

Public Sub TestLateBind() 
        Dim o As Object = CreateObject("SomeClass") 
        o.SomeMethod(arg1, arg2) 
        w = o.SomeFunction(arg1, arg2) 
        w = o.SomeGet 
        o.SomeSet = w 
End Sub

转换成C#的代码如下所示:

public void TestLateBind() 

        System.Type oType = System.Type.GetTypeFromProgID("SomeClass"); 
        object o = System.Activator.CreateInstance(oType); 
        oType.InvokeMember("SomeMethod", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] {arg1, arg2});
        w = oType.InvokeMember("SomeFunction", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] {arg1, arg2});
        w = oType.InvokeMember("SomeGet", System.Reflection.BindingFlags.GetProperty, null, o, null); 
        oType.InvokeMember("SomeSet", System.Reflection.BindingFlags.SetProperty, null, o, new object[] {w}); 
}

里面有方法,属性的调用设定,很简单。

实际例子如下,调用Office功能的:

  public void TestLateBind()
        {
            System.Type wordType = System.Type.GetTypeFromProgID( "Word.Application" );
            Object word = System.Activator.CreateInstance( wordType );
            wordType.InvokeMember( "Visible", BindingFlags.SetProperty, null, word, new Object[] { true } );
            Object documents = wordType.InvokeMember( "Documents", BindingFlags.GetProperty, null, word, null );
            Object document = documents.GetType().InvokeMember( "Add", BindingFlags.InvokeMethod, null, documents, null );
        }

这种Activator.CreateInstance方法还可以用来创建实例,并调用某些接口方法。毕竟接口必须要实例才能调用。 
可以参考我的另外一个随笔里面的源代码
http://www.cnblogs.com/phytan/archive/2007/07/11/814474.html

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/639/

标签: C#
分享给朋友:

“C#中实现VB中的CreateObject方法” 的相关文章

提交到app store时,提示ERROR ITMS-90478 ,ERROR ITMS-90062错误

提交到app store时,提示ERROR ITMS-90478 ,ERROR ITMS-90062错误

ios app提交到AppStore时,提示ERROR ITMS-90478 ,ERROR ITMS-90062,如下图所示: 看字面意思,应该是我提交的版本比之前上架的版本要低。 但是,之前的版本是V1.03,现在是V1.1.0。好像版本要高,并没有低。 然而,到AppStore构建版本那里查看...

ios7 xib适配statusBar—同时适配ios7和ios6

ios7 xib适配statusBar—同时适配ios7和ios6

参考资料:https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/SupportingEarlieriOS.html ios7中,由于status b...

二极管主要技术参数

描述二极管特性的物理量称为二极管的参数,它是反映二极管电性能的质量指标,是合理选择和使用二极管的主要依据。 1、电气参数 (1)正向压降VF VF:Forward Voltage,正向压降。是二极管在规定正向电流IF规定结温Tj下的正向电压。 (2)反向电流IR IR:Reverse Cu...

K3 wise 老单增加自定义项为下推或上拉【选单条件】

-- 老单增加自定义项选单条件,就是在下推时显示【没有符合条件的记录】,或在下游单据选单时在序时薄界面默认过滤条件单自据,这里以销售订单下推生成发货通知为例-- 步骤如下:-- 1、要用到的数据表有 -- ICTransactionType 该表反映了供需链所有单据的总体情况-- ICCl...

OKI编译器路径设置及uEase驱动的安装

OKI编译器路径设置及uEase驱动的安装

1、OKI编译器系统路径的设置 OKI的编译器环境IDEU8默认是安装到C盘的。在安装时,若选择到其他盘,则在默认设置下无法编译成功,编译报错。原因是默认的路径都是在C盘,要解决这个问题,必须重新设置系统路径。 设置步骤:File -> Environment settings -> S...

Win7在此处打开命令窗口

Win7在此处打开命令窗口

有时候会用到命令行 但是每次都要cd,太麻烦 后来发现居然可以用shift+右键,就会弹出来“在此处打开命令窗口”。...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。