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 为空字符串 (""),则使用本地计算机。
异常
异常类型 |
错误号 |
条件 |
---|---|---|
找不到或未提供 ProgId。 - 或 - ServerName 导致 DnsValidateName 函数失败,很可能是因为它的长度超过 63 个字符或包含无效字符。 |
||
服务器不可用。 |
||
不存在指定类型的对象。 |
如果正在升级使用非结构化错误处理方式的 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
智能设备开发人员说明
不支持此函数。
要求
模块:Interaction
**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)