CreateObject

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

基本介紹,說明,C#中的調用方式,

基本介紹

語法
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方法還可以用來創建實例,並調用某些接口方法。畢竟接口必須要實例才能調用。

相關詞條

熱門詞條

聯絡我們