Interaction.GetObject(String, String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回对 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 可见、关闭它和执行其他操作。 使用两个 API 调用,该过程 detectExcel
查找 Excel,如果它正在运行,请在“正在运行的对象”表中输入它。 如果 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
,自动化将根据你提供的文件名确定要启动的应用程序和要激活的对象。 但是,某些文件可以支持多个对象类。 例如,绘图可能支持三种不同类型的对象:对象 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 函数。
如果对象已将自身注册为 ActiveX 单实例对象,则无论调用多少次 CreateObject
,都只会创建该对象的一个实例。 对于单实例对象, GetObject
使用零长度字符串 () ""
语法调用时,始终返回相同的实例,如果省略参数, PathName
则会导致错误。 不能使用 GetObject
获取对使用 Visual Basic 创建的类的引用。
重要
函数 GetObject
需要非托管代码权限,这可能会影响其在部分信任情况下的执行。 有关详细信息,请参阅 SecurityPermission 和代码访问权限。