Interaction.GetObject(String, String) 方法

定义

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

[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object? GetObject (string? PathName = default, string? Class = default);
public static object GetObject (string PathName = default, string Class = default);
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetObject : string * string -> obj
static member GetObject : string * string -> obj
Public Function GetObject (Optional PathName As String = Nothing, Optional Class As String = Nothing) As Object

参数

PathName
String

可选。 String. 包含要检索的对象的文件的完整路径和名称。 如果省略了 PathName,则 Class 为必选。

Class
String

如果未提供 PathName,则为必选。 String. 表示对象的类的字符串。 Class 参数具有以下语法和部分:

appname.objecttype

[1|1] 参数

[1|2]“描述”

[2|1] appname

[2|2]“所需的”。 String. 提供对象的应用程序的名称。

[3|1] objecttype

[3|2]“所需的”。 String. 要创建的对象的类型或类。

返回

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

属性

例外

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

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

示例

以下示例使用 GetObject 函数获取对特定 Microsoft Excel 工作表 (excelObj) 的引用。 它使用工作表的 Application 属性使 Excel 可见、关闭 Excel 以及执行其他操作。 使用两个 API 调用, detectExcel 该过程会查找 Excel,如果 Excel 正在运行,则会在 Running Object 表中输入它。 如果 Excel 尚未运行,则对 的第一次调用 GetObject 会导致错误,在本例中,这会导致 excelWasNotRunning 标志设置为 True。 对 的第二次调用 GetObject 指定要打开的文件。 如果 Excel 尚未运行,则第二次调用将启动它,并返回对指定文件 test.xls表示的工作表的引用。 文件必须存在于指定位置;否则,Visual Basic 将 FileNotFoundException引发 。 接下来,示例代码使 Excel 和包含指定工作表的窗口都可见。

此示例需要 , Option Strict Off 因为它使用后期绑定,其中对象分配给 类型 Object的变量。 如果从 Visual Studio 中“项目”菜单的“添加引用”对话框的“COM”选项卡添加对 Excel 类型库的引用,则可以指定Option Strict On和声明特定对象类型的对象。

' Add Option Strict Off to the top of your program.
Option Strict Off
' 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
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

调用getExcel函数时,会进行检查以查看 Excel 是否已在运行。 如果不是,则会创建一个实例。

重要

为简单起见,前面的示例假定任何调用 XLMAIN 的窗口都属于 Microsoft Excel 实例。 如果另一个对象(可能由非法篡改启动)创建了一个具有该名称的窗口,它将接收你打算用于 Excel 的所有消息。 在要用于生产的应用程序中,应包含一些更严格的测试,以验证是否 XLMAIN 确实属于 Excel。

注解

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,自动化将根据提供的文件名确定要启动的应用程序和要激活的对象。 但是,某些文件可以支持多个对象类。 例如,绘图可能支持三种不同类型的对象:对象 ApplicationDrawing 对象和对象,所有这些对象都是同一文件的一 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 函数。

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

重要

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

适用于

另请参阅