CreateObject

CreateObject

CreateObject是指創建並返回一個對 ActiveX 對象的引用的函式。

基本介紹

語法

CreateObject(class[,servername])

CreateObject 函式的語法有如下部分:

部分 描述

class 必需的; Variant (String). 要創建的應用程式名稱和類。

servername 可選的; Variant (String). 要在其上創建對象的網路伺服器名稱。

class 參數使用 appname.objecttype 這種語法,包括以下部分:

部分 描述

appname 必需的;Variant(字元串)。提供該對象的應用程式名。

objecttype 必需的;Variant(字元串)。待創建對象的類型或類。

說明

每個支持自動化的應用程式都至少提供一種對象類型。例如,一個字處理應用程式可能會提供 Application 對象,Document 對象,以及 Toolbar 對象。

要創建 ActiveX 對象,只需將 CreateObject 返回的對象賦給一個對象變數:

'聲明一個對象變數來存放該對象的引用。

'Dim as Object 採用後期綁定方式。

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

上述代碼將啟動該應用程式創建該對象,在本例中就是創建一個 Microsoft Excel 電子數據表。對象創建後,就可以在代碼中使用自定義的對象變數來引用該對象。在下面的示例中,可以使用對象變數 ExcelSheet 來訪問新建對象的屬性和方法,以及訪問 Microsoft Excel 的其它對象,包括應用程式對象和單元格集合。

'設定 Application 對象使 Excel 可見

ExcelSheet.Application.Visible = True

'在表格的第一個單元中寫些文本

ExcelSheet.Cells(1, 1).Value = "This is column A, row 1"

'將該表格保存到 C:\test.doc 目錄

ExcelSheet.SaveAs "C:\ TEST.DOC"

'使用應用程式對象的 Quit 方法關閉 Excel。

ExcelSheet.Application.Quit

'釋放該對象變數

Set ExcelSheet = Nothing

使用 As Object 子句聲明對象變數,可以創建一個能包含任何類型對象引用的變數。不過,該變數訪問對象是後期綁定的,也就是說,綁定在程式運行時才進行。要創建一個使用前期綁定方式的對象變數,也就是說,在程式編譯時就完成綁定,則對象變數在聲明時應指定類 ID。例如,可以聲明並創建下列 Microsoft Excel 引用:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

前期綁定的變數引用可以提供更好的性能,但該變數只能存放聲明中所指定的類的引用。

可以將 CreateObject 函式返回的對象傳給一個參數為對象的函式。例如,下面的代碼創建並傳遞了一個 Excel.Application 對象的引用:

Call MySub (CreateObject("Excel.Application"))

可以在一個遠端連網的計算機上創建一個對象,方法是把計算機的名稱傳遞給 CreateObject 的 servername 參數。這個名稱與共享名稱的機器名部份相同:對於一個共享名稱為 "\\\\MyServer\\Public," 的 servername 參數是 "MyServer" 。

下面的代碼返回在一個名為 MyServer 的遠端計算機上運行的 Excel 實例的版本號:

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application", "MyServer")

Debug.Print xlApp.Version

如果遠端伺服器不存在或者不可用,則會發生一個運行時錯誤。

注意 當該對象當前沒有實例時,應使用 CreateObject。如果該對象已有實例在運行,就會啟動一個新的實例,並創建一個指定類型的對象。要使用當前實例,或要啟動該應用程式並載入一個檔案,可以使用 GetObject 函式。

如果對象已登記為單個實例對象,則不管執行多少次 CreateObject,都只能創建該對象的一個實例。

C#中的調用方式

C#中類似 CreateObject 的方法就是 System.Activator.CreateInstance. 後續的對象函式的調用可以通過InvokeMember方法來實現。

如在VB中的原始碼如下:

Public Sub TestLateBind()

Dim o As Object = CreateObject("SomeClass")

o.SomeMethod(arg1, arg2)

w = o.SomeFunction(arg1, arg2)

w = o.SomeGet

o.SomeSet = w

End Sub

轉換成C#的代碼如下所示:

public void TestLateBind()

{

System.Type oType = System.Type.GetTypeFromProgID("SomeClass");

object o = System.Activator.CreateInstance(oType);

oType.InvokeMember("SomeMethod", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] {arg1, arg2});

w = oType.InvokeMember("SomeFunction", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] {arg1, arg2});

w = oType.InvokeMember("SomeGet", System.Reflection.BindingFlags.GetProperty, null, o, null);

oType.InvokeMember("SomeSet", System.Reflection.BindingFlags.SetProperty, null, o, new object[] {w});

}

裡面有方法,屬性的調用設定,很簡單。

實際例子如下,調用Office功能的:

public void TestLateBind()

{

System.Type wordType = System.Type.GetTypeFromProgID( "Word.Application" );

Object word = System.Activator.CreateInstance( wordType );

wordType.InvokeMember( "Visible", BindingFlags.SetProperty, null, word, new Object[] { true } );

Object documents = wordType.InvokeMember( "Documents", BindingFlags.GetProperty, null, word, null );

Object document = documents.GetType().InvokeMember( "Add", BindingFlags.InvokeMethod, null, documents, null );

}

這種Activator.CreateInstance方法還可以用來創建實例,並調用某些接口方法。畢竟接口必須要實例才能調用。

相關詞條

相關搜尋

熱門詞條

聯絡我們