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 顯示、關閉它,以及執行其他動作。 使用兩個 API 呼叫,程式 detectExcel 會尋找 Excel,如果正在執行,請在執行中對象數據表中輸入它。 如果 Excel 尚未執行,則第一次呼叫 GetObject 會造成錯誤,在此範例中, excelWasNotRunning 會將旗標設定為 True。 的第二個呼叫指定要 GetObject 開啟的檔案。 如果 Excel 尚未執行,第二次呼叫會啟動它,並傳回指定檔案所代表之工作表的參考。 test.xls 檔案必須存在於指定的位置;否則,Visual Basic 會擲回 FileNotFoundException。 接下來,範例程式代碼會讓 Excel 和包含指定工作表的視窗變成可見。

這個範例需要 Option Strict Off ,因為它使用晚期系結,其中物件會指派給 類型的 Object變數。 如果您從 Visual Studio 中 [專案] 選單的 [加入參考] 對話方塊的 [COM] 索引標籤,指定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物件。 如果指定的型別沒有任何物件存在,就會發生錯誤。

存取 Subobject

某些應用程式可讓您啟用與檔案相關聯的子物件。 若要這樣做,請將驚嘆號 () ! 新增至檔名結尾,並以字串來識別您要啟用之檔案的一部分。 如需如何建立此字串的詳細資訊,請參閱建立物件之應用程式的檔。

例如,在繪圖應用程式中,您可能會有多個圖層到儲存在檔案中的繪圖。 您可以使用下列程式代碼,在名為 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 式需要 Unmanaged 程式代碼許可權,這可能會在部分信任的情況下影響其執行。 如需詳細資訊,請參閱 SecurityPermission程式碼存取權限

適用於

另請參閱