GetObject 函数 (Visual Basic)

更新:2007 年 11 月

返回对 COM 组件提供的对象的引用。

Public Function GetObject( _
    Optional ByVal PathName As String = Nothing, _
    Optional ByVal [Class] As String = Nothing _
) As Object

参数

参数

说明

PathName

可选。String。包含待检索对象的文件的完整路径和名称。如果省略 PathName 或者该参数为零长度字符串 (""),则 Class 是必需的。

Class

如果没有提供 PathName,则是必选项。String。表示对象的类的字符串。Class 参数的语法和组成部分如下:

appname.objecttype

参数

说明

appname

必需。String。提供对象的应用程序的名称。

objecttype

必需。String。要创建的对象的类型或类。

异常

异常类型

错误号

条件

Exception

429

不存在指定类类型的对象。

FileNotFoundException

432

不存在具有指定路径和文件名的对象。

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

备注

请使用 GetObject 函数从文件加载 COM 组件的实例。下面的示例演示这一点。

Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")

当上述代码运行时,会启动与指定的 PathName 关联的应用程序,同时激活指定文件中的对象。

默认情况

如果 PathName 是零长度字符串 (""),则 GetObject 返回指定类类型的新对象实例。如果省略 PathName 参数,则 GetObject 返回在 Class 中指定的类类型的当前活动对象。如果指定类型的对象不存在,则发生错误。

访问子对象

某些应用程序允许激活与文件关联的子对象。若要实现此功能,请在文件名尾部加一个感叹号 (!),然后在感叹号后加一个用来标识要激活文件部分的字符串。有关如何创建该字符串的信息,请参见创建对象的应用程序的相关文档。

例如,在绘图应用程序中,可将一幅图形的多个层存储在一个文件中。可以使用以下代码激活名为 schema.cad 的图形中的某一层。

layerObject = GetObject("C:\CAD\schema.cad!Layer3")

指定类

如果未指定对象的 Class,则 Automation 将根据所提供的文件名来确定要启动的应用程序和要激活的对象。但是某些文件可能支持对象的多个类。例如,一幅图形可能支持三种不同类型的对象:Application 对象、Drawing 对象和 Toolbar 对象,所有这些对象都是同一文件的组成部分。若要指定要在文件中激活的对象,请使用可选的 class 参数。下面的示例演示这一点。

Dim drawObj As Object
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")

在以上示例中,Figment 是绘图应用程序的名称,而 Drawing 是它支持的一种对象类型。

使用对象

对象激活后,应在代码中使用已声明的对象变量引用此对象。在前面的示例中,可以使用对象变量 drawObj 访问新对象的属性和方法。下面的示例演示这一点。

drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")
说明:

如果存在对象的当前实例,或者您希望使用已加载的文件创建对象,请使用 GetObject 函数。如果不存在当前实例,并且不希望使用已加载的文件启动对象,请使用 CreateObject 函数 (Visual Basic)

如果对象本身已经注册为 ActiveX 单实例对象,则无论调用多少次 CreateObject,都只创建对象的一个实例。对于单实例对象,当使用零长度字符串 ("") 语法调用 GetObject 时,它始终返回同一实例,如果省略 PathName 参数,则会导致错误。不能使用 GetObject 获取对用 Visual Basic 创建的类的引用。

安全说明:

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

使用完该对象后,请将对该对象的所有引用都设置为 Nothing。这将允许运行库释放该 COM 组件。

示例

下面的示例使用 GetObject 函数来确定 Excel 是否处于运行状态。

' Test to see if a copy of Excel is already running.
Private Sub testExcelRunning()
    On Error Resume Next
    ' GetObject called without the first argument returns a
    ' reference to an instance of the application. If the
    ' application is not already running, an error occurs.
    Dim excelObj As Object = GetObject(, "Excel.Application")
    If Err.Number = 0 Then
        MsgBox("Excel is running")
    Else
        MsgBox("Excel is not running")
    End If
    Err.Clear()
    excelObj = Nothing
End Sub

下面的示例使用 GetObject 函数获取对特定 Microsoft Excel 工作表 (excelObj) 的引用。调用 GetObject 将返回一个对工作表的引用,该工作表由特定文件 test.xls 表示。接下来的示例代码使 Excel 和包含指定工作表的窗口都可见。

此示例需要 Option Strict Off,因为它使用后期绑定,其中对象被赋给 Object 类型的变量。如果您向项目中添加了对 Excel 类型库的引用,则可以指定 Option Strict On 并声明特定对象类型的对象。若要添加该引用,请在 Visual Studio 的“项目”菜单中打开“添加引用”对话框,然后在“COM”选项卡中选择 Excel 类型库。

' Add Option Strict Off to the top of your program.
Option Strict Off
Private Sub getExcel()
    Dim fileName As String = "c:\vb\test.xls"

    If Not My.Computer.FileSystem.FileExists(fileName) Then
        MsgBox(fileName & " does not exist")
        Exit Sub
    End If

    ' Set the object variable to refer to the file you want to use.
    Dim excelObj As Object = GetObject(fileName)
    ' Show Excel through its Application property. 
    excelObj.Application.Visible = True
    ' Show the window containing the file.
    Dim winCount As Integer = excelObj.Parent.Windows.Count()
    excelObj.Parent.Windows(winCount).Visible = True

    ' Insert additional code to manipulate the test.xls file here.
    ' ...

    excelObj = Nothing
End Sub

智能设备开发人员说明

不支持此函数。

要求

命名空间:Microsoft.VisualBasic

**模块:**Interaction

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

请参见

参考

CreateObject 函数 (Visual Basic)

Declare 语句

Option Strict 语句

Exception

FileNotFoundException