`
fengzgxing
  • 浏览: 242790 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

C#中实现VB中的CreateObject方法.

阅读更多
http://www.cnblogs.com/phytan/archive/2007/07/11/814175.html

经常看到有些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
分享到:
评论

相关推荐

    c# vb2008 vb6.0实现屏幕取词

    本主题将深入探讨如何在C#、VB.NET 2008和VB6.0中实现这一功能,特别是通过调用金山词霸的COM组件来完成。 首先,我们要了解COM(Component Object Model)组件。COM是一种二进制标准,用于创建跨语言和跨平台的可...

    COM通信——C#、vb

    在本文中,我们将深入探讨如何使用C#和VB(Visual Basic)这两种不同的.NET语言来实现COM通信。 首先,我们需要了解COM的基本概念。COM是一个二进制标准,定义了对象如何创建、接口如何暴露以及方法如何调用。它...

    adodb.recordset.open(rs.open)方法参数详解

    最后,根据程序的具体需求,可以通过CursorType属性或Open方法中的CursorType参数来设置游标的类型,以优化数据库操作性能和满足业务逻辑需要。需要注意的是,并非所有数据提供者(providers)都支持Recordset对象的...

    Acrobat.dll实现PDF文件转图片

    在C#、VB.NET或其他支持COM的编程语言中,你可以创建一个对Acrobat DLL的引用,然后调用其中的方法来执行转换操作。 以下是一个基本的步骤概述: 1. **初始化Acrobat**: 首先,需要初始化Acrobat的COM组件,通常...

    VB.rar_源码

    9. **对象和类相关的函数**:VB支持面向对象编程,因此有CreateObject、New等用于创建对象,以及对象的方法和属性。 10. **系统函数**:如Shell、AppActivate等,用于与操作系统进行交互,如打开应用程序、激活窗口...

    vb写的资源下载器....

    通过多线程技术,我们可以在VB中实现高效的资源下载,满足用户的需求。不过,随着.NET Framework的不断发展,现在更多地推荐使用C#或VB.NET,它们提供了更强大、更现代的多线程支持和网络编程接口。

    VFP调用C#编写的DLL

    - 这个方法是为了演示如何在VFP中调用C#的方法。 3. **实现COM互操作性**: - 为了使C#编写的DLL能够被VFP识别并调用,需要实现特定的方法: - `public void Initialize() {}` 和 `public void Dispose() {}` 这...

    ASP 调用C#编写的DLL的方法(成功运行)

    本文将深入探讨如何在ASP环境中调用由C#编写的DLL,实现跨语言的数据交换和功能拓展。 #### 一、ASP调用C# DLL的基本原理 在.NET框架下,ASP可以利用COM+组件或.NET Remoting等技术来调用C#编写的DLL。其中,通过...

    VB6_OPC_Client.rar

    "VB6_OPC_Client.rar"这个压缩包很可能是包含了一组VB6编程示例或教程,帮助用户理解如何在VB6中实现OPC客户端功能。 OPC的核心理念是提供一个统一的接口,使得不同厂商的硬件设备和软件系统可以通过标准的方式进行...

    完整的VFP调用C#编写的DLL教程 ——VFP简繁体转换

    - 在StringConvert类中实现一个简繁体转换的方法StrMutualConvert()。 3. **生成DLL**: - 编译生成C#项目,得到DLL文件(例如:CCharpClassLibrary.dll)。 ### 知识点三:VFP调用C#编写的DLL 1. **引用DLL**:...

    调用c#dll生成二维码.zip

    本案例涉及的是在VB(Visual Basic)或VBA(Visual Basic for Applications)环境中调用C#编写的DLL(动态链接库)来实现特定功能,这里是生成二维码。这个过程可以通过.NET Framework提供的COM互操作性实现,而无需...

    VB与AutoCAD二次开发入门技巧资料

    2. 调用方法和属性:通过VB代码调用AutoCAD对象的方法和属性,如DrawLine、MoveEntity等,实现绘图和编辑操作。 3. 事件处理:VB的事件驱动编程机制可与AutoCAD事件相结合,如图形打开、关闭时触发相应功能。 五、...

    C#写COM组件

    例如,在VBA中,你可以使用`CreateObject`函数,而在VB.NET中,你可以使用`Activator.CreateInstance`方法。 总的来说,C#编写COM组件是一种强大的技术,它能够让你的代码与多种环境无缝交互。虽然创建和使用COM...

    How to create a COM object using VS 2008 and consume it from VB 6.0 client application

    在这个文件中,我们可以定义一些方法,这些方法将在COM对象中实现: ```csharp using System; using System.Runtime.InteropServices; [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)...

    VB Script 基础及提高教程

    - **C#与VBScript交互**:了解如何在C#应用程序中执行VBScript代码,或反之,为.NET开发添加脚本支持。 - **ASP.NET与VBScript**:在ASP.NET网页开发中,VBScript可以作为服务器端脚本语言,创建动态网页。 4. **...

    c++,c#可以用的数学算式解析算法(com组件)

    在VB.NET中,由于其.NET框架提供了对COM组件更友好的集成,开发者可以通过`CreateObject`函数直接创建组件实例,然后调用相应的成员方法。 为了更好地利用这个组件,开发者应仔细阅读提供的使用文档,了解每个方法...

    ASP中实现小偷程序

    根据提供的文件信息,标题、描述和标签均指出是关于“ASP中实现小偷程序”的内容。但是需要注意的是,“小偷程序”(Web Scraper)在技术领域通常指的是用于抓取网页内容并从中提取所需数据的程序。这类程序的合法性...

    c# 编写com组件

    然后在其他应用程序中,可以通过`CreateObject`或`New`操作符实例化并使用这个C#编写的COM组件。 总结来说,C#编写COM组件涉及控件设计、事件处理、接口实现、属性暴露和注册等多个环节,它提供了.NET与非.NET世界...

    文件管理程序(VB6.0代码编写)

    3. **保存文件**:使用SaveFileDialog获取保存路径,然后使用`CreateObject("Scripting.FileSystemObject")`创建FileSystemObject,通过其`OpenTextFile`或`OpenAsBinaryStream`方法写入文件。 在VB6.0中,文件操作...

    如何保存rtf文件到数据库中Visual Basic6.0时尚源程序

    在IT行业中,数据库存储是关键任务之一,尤其是在开发应用程序时。...VB6.0提供了足够的工具来实现这一目标,但需要注意的是,现代开发环境中(如VB.NET或C#)通常有更高效和灵活的方法来处理这些任务。

Global site tag (gtag.js) - Google Analytics