Interaction.GetObject(String, String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回对 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中
' 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,自动化会根据提供的文件名确定要启动的应用程序和要激活的对象。 但是,某些文件可以支持多个对象类。 例如,绘图可能支持三种不同类型的对象:对象 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 创建的类的引用。
Important
该 GetObject 函数需要非托管代码权限,这可能会在部分信任的情况下影响其执行。 有关详细信息,请参阅 SecurityPermission 和 代码访问权限。