Share via


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 是空字串 (""),則使用本機電腦。

例外狀況

例外狀況類型

錯誤代碼

條件

Exception

429

找不到或是未提供 ProgId

-或-

ServerName 無法執行 DnsValidateName 函式,最可能的原因是它的長度大於 63 個字元或包含無效字元。

Exception

462

伺服器無法使用。

FileNotFoundException

53

指定型別的物件不存在

如果將使用非結構化錯誤處理的 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

智慧型裝置開發人員注意事項

不支援這個函式。

需求

命名空間Microsoft.VisualBasic

模組Interaction

組件:Visual Basic Runtime Library (在 Microsoft.VisualBasic.dll 中)

請參閱

參考

GetObject 函式 (Visual Basic)

Dim 陳述式 (Visual Basic)

Declare 陳述式

Exception

FileNotFoundException

Activator

CreateInstance

CreateInstanceFrom

其他資源

.NET Framework 應用程式中的 COM 互通性

與 Unmanaged 程式碼互通