Interaction.GetObject(String, String) 方法

定义

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

public static object GetObject(string PathName = default, string Class = default);
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可见、关闭和执行其他操作。 使用两个 API 调用,detectExcel过程查找Excel,如果正在运行,请在“正在运行的对象”表中输入它。 如果Excel尚未运行,则对 GetObject 的第一次调用会导致excelWasNotRunning标志设置为 True,则会导致错误。 第二次调用指定要 GetObject 打开的文件。 如果Excel尚未运行,第二个调用将启动它,并返回对由指定文件表示的工作表的引用,test.xls。 该文件必须存在于指定位置;否则,Visual Basic将引发 FileNotFoundException。 接下来,示例代码使 Excel 和包含指定工作表的窗口可见。

此示例要求 Option Strict Off 它使用后期绑定,其中对象被分配给类型的 Object变量。 如果从Visual Studio Visual Studio中COM <选项卡添加对Excel类型库的引用,则可以指定c<>2/>>Project< <> >和声明特定对象类型的对象。

' 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是否已运行。 如果不是,则会创建一个实例。

Important

为简单起见,前面的示例假定任何名为 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 创建的类的引用。

Important

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

适用于

另请参阅