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
Optional.
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,若正在執行,則將其輸入 Running Object 資料表。 第一次呼叫 GetObject 會因 Excel 尚未執行而出錯,在此例中會導致 excelWasNotRunning 旗標設為 True。 第二個呼叫 是 GetObject 指定要開啟的檔案。 如果 Excel 尚未執行,第二次呼叫會啟動它並回傳以指定檔案 test.xls 代表的工作表參考。 檔案必須存在於指定位置;否則,Visual Basic會投擲 FileNotFoundException。 接著,範例程式碼會同時顯示 Excel 和包含指定工作表的視窗。
此範例需要, Option Strict Off 因為它使用了晚期綁定,將物件分配到型別 Object為 的變數。 你可以指定
' 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及代碼存取權限。