Interaction.CreateObject(String, String) 方法

定义

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

public static object CreateObject (string ProgId, string? ServerName = "");
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object CreateObject (string ProgId, string? ServerName = "");
public static object CreateObject (string ProgId, string ServerName = "");
static member CreateObject : string * string -> obj
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
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 对象的引用。 不能在 Visual Basic 中使用 CreateObject 创建这些类的实例,除非将类显式公开为 COM 组件。

属性

例外

服务器不可用。

不存在指定类型的对象。

示例

以下示例使用 CreateObject 函数创建 Microsoft Excel 工作表,并将该工作表保存到文件中。 若要使用此示例,必须在运行此程序的计算机上安装 Excel。 此外,还必须从“项目”菜单上的“添加引用”对话框的“COM”选项卡添加对类型库的引用。 类型库的名称因计算机上安装的 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 子句声明对象变量将创建一个变量,该变量可以包含对任何类型的对象的引用。 但是,通过该变量访问对象是 后期绑定的,也就是说,在程序运行时会发生绑定。 应避免后期绑定的原因有很多,包括应用程序性能降低。

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

与非托管代码交互

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

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

在远程计算机上创建对象

可以通过将计算机的名称传递给 ServerName 函数的 CreateObject 参数,在远程联网计算机上创建 对象。 该名称与共享名称的“计算机名称”部分相同:对于名为“\\MyServer\Public” ServerName 的共享,为“MyServer”。

注意

请参阅 COM 文档 (请参阅 Microsoft 开发人员网络) ,了解有关在远程联网计算机上访问应用程序的其他信息。 可能需要为应用程序添加注册表项。

以下代码返回在名为 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 对象的完全等效机制,Activator但命名空间中的 System 包含用于创建本地或远程对象的方法。 具体而言, CreateInstance 方法或 CreateInstanceFrom 方法可能很有用。

重要

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

适用于

另请参阅