複製鏈接
請複製以下鏈接發送給好友

CreateObject

鎖定
CreateObject是指創建並返回一個對 ActiveX 對象的引用的函數
外文名
CreateObject
類    型
函數

CreateObject基本介紹

語法
CreateObject(class[,servername])
CreateObject 函數的語法有如下部分:
部分 描述
class 必需的; Variant (String). 要創建的應用程序名稱和類。
servername 可選的; Variant (String). 要在其上創建對象的網絡服務器名稱
class 參數使用 appname.objecttype 這種語法,包括以下部分:
部分 描述
appname 必需的;Variant(字符串)。提供該對象的應用程序名。
objecttype 必需的;Variant(字符串)。待創建對象的類型或類。

CreateObject説明

每個支持自動化的應用程序都至少提供一種對象類型。例如,一個字處理應用程序可能會提供 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,都只能創建該對象的一個實例。

CreateObjectC#調用方式

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