2009-04-24 45 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 ; 
} 
相关问题