基本信息
Visual Basic 語言參考
CreateObject 函式 (Visual Basic)
Public Shared Function CreateObject( _
ByVal ProgId As String, _
Optional ByVal ServerName As String = "" _
) As Object
CreateObject函式 返回
創建並返回一個對 ActiveX 對象的引用。
語法
CreateObject(class,[servername])
CreateObject 函式的語法有如下部分:
部分 描述
class 必需的; Variant (String). 要創建的應用程式名稱和類。
servername 可選的; Variant (String). 要在其上創建對象的網路伺服器名稱。
class 參數使用 appname.objecttype 這種語法,包括以下部分:
部分 描述
appname 必需的;Variant(字元串)。提供該對象的應用程式名。
objecttype 必需的;Variant(字元串)。待創建對象的類型或類。
示例:
'如果是用於ASP的VBScript腳本請使用Server.CreateObject
Set connDB = CreateObject("ADODB.Connection")
參數
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 函式更為有效。
與非託管代碼互動
另一個問題是 COM 對象使用非託管代碼,即沒有公共語言運行庫優點的代碼。在將 Visual Basic 的託管代碼與來自 COM 的非託管代碼混合時,將涉及到相當程度的複雜性。添加對 COM 對象的引用時,Visual Basic 會搜尋該庫的主互操作程式集 (PIA);如果找到一個程式集,就會使用它。如果未找到 PIA,它會創建包含 COM 庫中每個類的本地互操作類的互操作程式集。有關更多信息,請參見 .NET Framework 應用程式中的 COM 互操作性。
通常,您應該儘可能使用強綁定對象和主互操作程式集。下面的示例僅出於演示的目的將 CreateObject 函式用於 Microsoft Office 對象。但是,當與適當的主 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,也只創建一個對象實例。
創建 Framework 對象
CreateObject 函式只能用於創建 COM 對象。儘管沒有用於創建 .NET Framework 對象的完全等效機制,但 System 命名空間中的 Activator 包含有一些方法來創建本地或遠程對象。具體而言,CreateInstance 方法或 CreateInstanceFrom 方法很有用。
安全注意
CreateObject 函式需要非託管代碼許可權,這可能會對它在部分信任情況下的執行產生影響。有關更多信息,請參見 SecurityPermission 和代碼訪問許可權。
示例
下面的示例使用 CreateObject 函式來創建 Microsoft Excel 工作表,並將該工作表保存到檔案中。若要使用此示例,必須在運行此程式的計算機上安裝 Excel。而且,您必須從“項目”選單上“添加引用”對話框的“COM”選項卡中添加對類型庫的引用。根據計算機上安裝的 Excel 版本,類型庫的名稱將有所不同。例如,對於 Microsoft Excel 2002,類型庫的名稱為 Microsoft Excel 10.0 Object Library。
Visual Basic 複製代碼
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