CreateObject 函式 (Visual Basic)
更新:2007 年 11 月
建立並傳回 COM 物件的參考;除非類別已明確公開為 COM 元件,否則 CreateObject 無法用來在 Visual Basic 中建立類別的執行個體。
Public Shared Function CreateObject( _
ByVal ProgId As String, _
Optional ByVal ServerName As String = "" _
) As Object
參數
ProgId
必要項。String。要建立物件的程式 ID。ServerName
選擇項。String。將建立物件的網路伺服器名稱。如果 ServerName 是空字串 (""),則使用本機電腦。
例外狀況
例外狀況類型 |
錯誤代碼 |
條件 |
---|---|---|
找不到或是未提供 ProgId -或- ServerName 無法執行 DnsValidateName 函式,最可能的原因是它的長度大於 63 個字元或包含無效字元。 |
||
伺服器無法使用。 |
||
指定型別的物件不存在 |
如果將使用非結構化錯誤處理的 Visual Basic 6.0 應用程式升級,請參閱「錯誤代碼」資料行 (您可以將錯誤代碼與 Number 屬性 (Err 物件) 比對)。但是,請盡可能考慮以 Visual Basic 的結構化例外處理概觀 取代這類錯誤控制項。
備註
若要建立 COM 元件的執行個體,請將 CreateObject 傳回的物件指派給物件變數:
Sub CreateADODB()
Dim adoApp As Object
adoApp = CreateObject("ADODB.Connection")
End Sub
用以儲存傳回物件的物件變數型別,會影響應用程式的效能。利用 As Object 子句宣告物件變數會建立可包含任何型別物件參考的變數。不過,透過這個變數存取物件是屬於「晚期繫結」,也就是說,當您的程式執行時才會發生繫結。應避免晚期繫結 (包含更慢的應用程式效能) 的原因有許多。
您可以建立可導致早期繫結的物件變數,換句話說,在編譯程式時繫結。如果要這麼做,請在 [專案] 功能表之 [加入參考] 對話方塊的 [COM] 索引標籤中,加入物件的型別程式庫參考。接下來宣告物件之特定型別的物件變數。在多數情況下,使用 Dim 陳述式和主要 Interop 組件建立物件,比使用 CreateObject 函式更有效率。
與 Unmanaged 程式碼互動
另外一個問題是,COM 物件會使用 Unmanaged 程式碼,這也就是無法利用 Common Language Runtime 的程式碼。將 Visual Basic 的 Managed 程式碼和 COM 的 Unmanaged 程式碼加以混合是相當複雜的工作。將參考加入至 COM 物件時,Visual Basic 會搜尋該程式庫中的主要 interop 組件 (PIA),如果找到的話就會使用。如果找不到 PIA,它就會建立互通性組件,其中包含 COM 程式庫中每個類別的本機互通性類別。如需詳細資訊,請參閱 .NET Framework 應用程式中的 COM 互通性。
應盡量使用穩固繫結的物件和主要 Interop 組件。下列的範例使用含 Microsoft Office 的 CreateObject 函式,僅做為示範的用途。但與適當的主要 Interop 組件搭配使用時,這些物件比較容易使用,也比較可靠。
在遠端電腦上建立物件
您可以藉著將遠端網路電腦的名稱傳遞至 CreateObject 函式的 ServerName 引數,來建立該電腦上的物件。該名稱與共用名稱的機器名稱部分相同:如果共用的名稱為 "\\MyServer\Public",則 ServerName 為 "MyServer"。
注意事項: |
---|
如需能夠在遠端網路電腦上存取應用程式的其他資訊,請參閱 COM 文件 (請參閱 Microsoft Developer Network)。您可能需要為應用程式加入登錄機碼。 |
下列程式碼將傳回名為 MyServer 之遠端電腦上執行的 Excel 執行個體版本號碼:
Sub CreateRemoteExcelObj()
Dim xlApp As Object
' Replace string "\\MyServer" with name of the remote computer.
xlApp = CreateObject("Excel.Application", "\\MyServer")
MsgBox(xlApp.Version)
End Sub
如果遠端伺服器名稱不正確或無法取得,則會發生執行階段錯誤。
注意事項: |
---|
請在物件目前沒有執行個體的情況下使用 CreateObject。如果物件的執行個體已在執行中,則會啟動新的執行個體並建立指定型別的物件。若要使用目前的執行個體,或是啟動應用程式並讓它載入檔案,請使用 GetObject 函式。如果物件已將本身登錄為單一執行個體物件,無論 CreateObject 執行幾次,該物件也只能建立一個執行個體。 |
建立架構物件
您只能使用 CreateObject 函式建立 COM 物件。當無法使用完全等效的機制來建立 .NET Framework 物件時,可使用 System 命名空間中的 Activator 所包含的方法來建立本機或遠端物件。特別的是,CreateInstance 方法或 CreateInstanceFrom 方法可能很有用。
安全性注意事項: |
---|
CreateObject 函式需要 Unmanaged 程式碼的使用權限,而該權限在部分信任的情況下,可能會影響其執行。如需詳細資訊,請參閱 SecurityPermission 和程式碼存取使用權限。 |
範例
下列範例使用 CreateObject 函式建立 Microsoft Excel 工作表,並將其存成檔案。若要使用這個範例,Excel 必須安裝在執行這個程式的電腦上。此外,也必須從 [專案] 功能表之 [加入參考] 對話方塊的 [COM] 索引標籤中,加入型別程式庫的參考。型別程式庫的名稱將視電腦上安裝的 Excel 版本而有不同。例如,Microsoft Excel 2002 的型別程式庫名稱是 [Microsoft Excel 10.0 Object Library]。
Sub TestExcel()
Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
xlApp = CType(CreateObject("Excel.Application"), _
Microsoft.Office.Interop.Excel.Application)
xlBook = CType(xlApp.Workbooks.Add, _
Microsoft.Office.Interop.Excel.Workbook)
xlSheet = CType(xlBook.Worksheets(1), _
Microsoft.Office.Interop.Excel.Worksheet)
' The following statement puts text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
' The following statement shows the sheet.
xlSheet.Application.Visible = True
' The following statement saves the sheet to the C:\Test.xls directory.
xlSheet.SaveAs("C:\Test.xls")
' Optionally, you can call xlApp.Quit to close the workbook.
End Sub
智慧型裝置開發人員注意事項
不支援這個函式。
需求
模組:Interaction
組件:Visual Basic Runtime Library (在 Microsoft.VisualBasic.dll 中)