2009-04-24 48 views
12

有誰知道有利用該選項的理由:CreateObject和Wscript.CreateObject有什麼不同?

Wscript.CreateObject("some.object") 

CreateObject("some.object") 
在VBScript

?當我找到使用Wscript.CreateObject的文檔或示例時,我通常使用CreateObject進行重寫,因爲它似乎總能工作,然後我可以輕鬆地在HTA或ASP中重用該代碼。但是我總是想知道爲什麼這個特性存在,以及如果在VBScript中使用這種或那種方式會產生什麼差別。

回答

23

當你只用一個參數來調用它們時,兩者之間沒有區別。做同樣的事情。

如果您使用兩個參數進行調用,兩者之間的差異僅在證據中。該聲明

Wscript.CreateObject("some.object", "AnotherParam") 

CreateObject("some.object", "AnotherParam") 

做完全不同的事情:

VBScript的CreateObject函數解釋的第二個參數爲遠程計算機名和嘗試創建的名爲COM對象那臺遠程計算機;在這個例子中,它試圖在名爲「AnotherParam」的遠程計算機上以ProgId爲「some.object」實例化對象的實例。 WScript CreateObject方法將第二個參數解釋爲一個子程序前綴,用於處理來自該對象的事件。兩個GetObject函數具有類似的相關性。

(從TechNet, 部分,適用 「與WSH的VBScript比較CreateObject和GetObject的功能」。)

+0

你手邊有一個完整的代碼示例? – krlmlr 2013-05-24 19:30:39

5

我猜WScript對象有CreateObject方法,所以任何Windows腳本語言都可以創建COM對象。

VBScript具有作爲全局函數的能力,但其他Windows腳本宿主語言可能不具有此功能。

例如,JScript不具有全球CreateObject功能(我相信)(它,然而,有一個var a = new ActiveXObject("...")語法,所以你不需要使用JScript中WScript.CreateObject其一)。

我猜想這兩個函數沒有區別。

編輯:有差(但只有當你試圖實例化遠程主機上的DCOM對象),看到@Thomas彼得森答案。

3

JScript中沒有一個全球性的創建對象? WScript不能使用JScript嗎?

Code from devGuru

// JScript 
var objIE = WScript.CreateObject("InternetExplorer.Application","objIE_") 
objIE.Visible = true 

while (objIE.Visible){ 
    WScript.Sleep(500); 
} 

function objIE_NavigateComplete2(pDisp, URL){ 
    WScript.Echo("You just navigated to", URL) 
} 

function objIE_OnQuit(){ 
    boolBrowserRunning = false ; 
} 
相關問題