Interaction.GetObject(String, String) 方法 (Microsoft.VisualBasic)

您所在的位置:网站首页 vba的getobject Interaction.GetObject(String, String) 方法 (Microsoft.VisualBasic)

Interaction.GetObject(String, String) 方法 (Microsoft.VisualBasic)

2024-02-12 04:01| 来源: 网络整理| 查看: 265

返回对 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); [] 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. 要创建的对象的类型或类。

返回 Object

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

属性 SupportedOSPlatformAttribute 例外 Exception

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

FileNotFoundException

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

示例

以下示例使用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中 Project菜单的 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 和代码访问权限。

适用于 另请参阅 CreateObject(String, String) Exception FileNotFoundException Declare Statement Option Strict Statement


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3