Interaction.CreateObject(String, String) 方法

定义

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

public static object CreateObject(string ProgId, string ServerName = "");
static member CreateObject : string * string -> obj
Public Function CreateObject (ProgId As String, Optional ServerName As String = "") As Object

参数

ProgId
String

必填。 String。 要创建的对象的程序 ID。

ServerName
String

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

返回

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

例外

服务器不可用

不存在指定类型的对象。

示例

以下示例使用 CreateObject 函数创建Microsoft Excel工作表并将工作表保存到文件中。 若要使用此示例,必须在运行此程序的计算机上安装Excel。 此外,必须从 c1>Add Reference1 对话框的 COM 选项卡添加对类型库的引用Project。 类型库的名称因计算机上安装Excel的版本而异。 例如,Microsoft Excel 2002 的类型库命名为 Microsoft Excel 10.0 对象库

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

注解

若要创建 COM 组件的实例,请将返回 CreateObject 的对象分配给对象变量:

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

用于存储返回的对象的对象变量的类型可能会影响应用程序的性能。 使用 As Object 子句声明对象变量会创建一个变量,该变量可以包含对任何类型的对象的引用。 但是,通过该变量访问对象是 后期绑定的,也就是说,在程序运行时会发生绑定。 应避免延迟绑定的原因有很多,包括应用程序性能较慢。

可以创建一个对象变量,该变量会导致早期绑定,即编译程序时绑定。 为此,请从 c1>Add Reference1 对话框的 COM 选项卡为对象添加对对象的引用Project。 然后声明对象特定类型的对象变量。 在大多数情况下,使用 Dim 语句和主互操作程序集创建对象比使用 CreateObject 函数更有效。

与非托管代码交互

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

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

在远程计算机上创建对象

可以通过将计算机的名称传递给ServerNameCreateObject函数的参数,在远程网络计算机上创建对象。 该名称与共享名称的“计算机名称”部分相同:对于名为“\\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 ,都会只创建该对象的一个实例。

创建框架对象

只能使用该 CreateObject 函数来创建 COM 对象。 虽然没有用于创建 .NET Framework 对象的确切等效机制,但 System 命名空间中的 Activator 包含用于创建本地或远程对象的方法。 具体而言, CreateInstance 该方法或 CreateInstanceFrom 方法可能很有用。

Important

CreateObject 函数需要非托管代码权限,这可能会在部分信任的情况下影响其执行。 有关详细信息,请参阅 SecurityPermission代码访问权限

适用于

另请参阅