CreateObject 函数 (Visual Basic)

更新:2007 年 11 月

创建和返回对 COM 对象的引用。CreateObject 不能用于在 Visual Basic 中创建类的实例,除非那些类显式公开为 COM 组件。

Public Shared Function CreateObject( _
   ByVal ProgId As String, _
   Optional ByVal ServerName As String = "" _
) As Object

参数

  • ProgId
    必需。String。要创建的对象的程序 ID。

  • ServerName
    可选。String。将要在其上创建对象的网络服务器的名称。如果 ServerName 为空字符串 (""),则使用本地计算机。

异常

异常类型

错误号

条件

Exception

429

找不到或未提供 ProgId。

- 或 -

ServerName 导致 DnsValidateName 函数失败,很可能是因为它的长度超过 63 个字符或包含无效字符。

Exception

462

服务器不可用。

FileNotFoundException

53

不存在指定类型的对象。

如果正在升级使用非结构化错误处理方式的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象) 比较错误号。) 然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述 替换这种错误控制。

备注

若要创建 COM 组件的实例,请将由 CreateObject 返回的对象赋给一个对象变量:

Sub CreateADODB()
   Dim adoApp As Object
   adoApp = CreateObject("ADODB.Connection")
End Sub

用于存储返回对象的对象变量的类型可影响应用程序的性能。通过用 As Object 子句声明对象变量所创建的变量可以包含对任何对象类型的引用。然而,通过该变量访问对象是“后期绑定”,即绑定在程序运行时发生。由于包括应用程序性能降低在内的多种原因,应该避免后期绑定。

可以创建一个导致早期绑定的对象变量,即绑定在编译程序时发生。若要执行此操作,从“项目”菜单上“添加引用”对话框的“COM”选项卡中,为您的对象添加对类型库的引用。然后声明对象的特定类型的对象变量。大多数情况下,使用 Dim 语句和主 Interop 程序集来创建对象比使用 CreateObject 函数更为有效。

与非托管代码交互

另一个问题是 COM 对象使用非托管代码,即没有公共语言运行库优点的代码。在将 Visual Basic 的托管代码与来自 COM 的非托管代码混合时,将涉及到相当程度的复杂性。添加对 COM 对象的引用时,Visual Basic 会搜索该库的主互操作程序集 (PIA);如果找到一个程序集,就会使用它。如果未找到 PIA,它会创建包含 COM 库中每个类的本地互操作类的互操作程序集。有关更多信息,请参见 .NET Framework 应用程序中的 COM 互操作性

通常,您应该尽可能使用强绑定对象和主互操作程序集。下面的示例仅出于演示的目的将 CreateObject 函数用于 Microsoft Office 对象。但是,当与适当的主 Interop 程序集一起使用时,这些对象将更易于使用,并且更加可靠。

在远程计算机上创建对象

您可以通过将计算机的名称传递到 CreateObject 函数的 ServerName 参数,在远程网络计算机上创建对象。该名称与共享名的“计算机名”部分相同。例如,如果共享名是“\\MyServer\Public”,则 ServerName 是“MyServer”。

说明:

有关使应用程序可在联网的远程计算机上访问的附加信息,请参考 COM 文档(参见 Microsoft Developer Network)。可能需要为应用程序添加注册表项。

下面的代码返回在名为 MyServer 的远程计算机上运行的 Excel 实例的版本号:

Sub CreateRemoteExcelObj()
    Dim xlApp As Object
    ' Replace string "\\MyServer" with name of the remote computer.
    xlApp = CreateObject("Excel.Application", "\\MyServer")
    MsgBox(xlApp.Version)
End Sub

如果远程服务器名不正确或者不可用,将发生运行时错误。

说明:

当不存在对象的当前实例时使用 CreateObject。如果对象的实例已经正在运行,则将启动新的实例并创建指定类型的对象。若要使用当前实例或者启动应用程序并让它加载文件,请使用 GetObject 函数。如果对象本身已经注册为单实例对象,则无论执行多少次 CreateObject,也只创建一个对象实例。

创建 Framework 对象

CreateObject 函数只能用于创建 COM 对象。尽管没有用于创建 .NET Framework 对象的完全等效机制,但 System 命名空间中的 Activator 包含有一些方法来创建本地或远程对象。具体而言,CreateInstance 方法或 CreateInstanceFrom 方法很有用。

安全说明:

CreateObject 函数需要非托管代码权限,这可能会对它在部分信任情况下的执行产生影响。有关更多信息,请参见 SecurityPermission代码访问权限

示例

下面的示例使用 CreateObject 函数来创建 Microsoft Excel 工作表,并将该工作表保存到文件中。若要使用此示例,必须在运行此程序的计算机上安装 Excel。而且,您必须从“项目”菜单上“添加引用”对话框的“COM”选项卡中添加对类型库的引用。根据计算机上安装的 Excel 版本,类型库的名称将有所不同。例如,对于 Microsoft Excel 2002,类型库的名称为 Microsoft Excel 10.0 Object Library。

Sub TestExcel()
    Dim xlApp As Microsoft.Office.Interop.Excel.Application
    Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

    xlApp = CType(CreateObject("Excel.Application"), _
                Microsoft.Office.Interop.Excel.Application)
    xlBook = CType(xlApp.Workbooks.Add, _
                Microsoft.Office.Interop.Excel.Workbook)
    xlSheet = CType(xlBook.Worksheets(1), _
                Microsoft.Office.Interop.Excel.Worksheet)

    ' The following statement puts text in the second row of the sheet.
    xlSheet.Cells(2, 2) = "This is column B row 2"
    ' The following statement shows the sheet.
    xlSheet.Application.Visible = True
    ' The following statement saves the sheet to the C:\Test.xls directory.
    xlSheet.SaveAs("C:\Test.xls")
    ' Optionally, you can call xlApp.Quit to close the workbook.
End Sub

智能设备开发人员说明

不支持此函数。

要求

命名空间:Microsoft.VisualBasic

模块:Interaction

**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)

请参见

参考

GetObject 函数 (Visual Basic)

Dim 语句 (Visual Basic)

Declare 语句

Exception

FileNotFoundException

Activator

CreateInstance

CreateInstanceFrom

其他资源

.NET Framework 应用程序中的 COM 互操作性

与非托管代码交互操作