CreateObject和Wscript.CreateObject之间有什么区别?

18

有人知道使用以下选项的原因吗:

Wscript.CreateObject("some.object")

CreateObject("some.object")

在VBScript中,当我发现文档或示例使用Wscript.CreateObject时,我通常会改写为CreateObject,因为它似乎总是有效的,而且我可以轻松地在HTA或ASP中重用代码。但我一直想知道为什么存在这个功能,如果在VBScript中使用其中一种方式与另一种方式有何区别。

3个回答

29

当你只使用一个参数调用它们时,这两者之间没有区别。它们执行的功能完全相同。

只有当你使用两个参数调用时才能看到它们之间的区别。以下语句:

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

并且。
CreateObject("some.object", "AnotherParam")

做完全不同的事情:

VBScript CreateObject函数将第二个参数解释为远程计算机名称,并尝试在该远程计算机上创建命名的COM对象; 在此示例中,它尝试在名为“AnotherParam”的远程计算机上实例化具有ProgId“some.object”的对象的实例。 WScript CreateObject方法将第二个参数解释为用于处理来自对象的事件的子例程前缀。 两个GetObject函数也是类似相关的。

(摘自TechNet,“比较VBScript CreateObject和GetObject函数与WSH”部分。)


@thomas-petersen 抱歉打扰您,但在您的报价末尾,它说“这两个 GetObject 函数是”,而其余文本涉及到“CreateObject”。 - maxxyme

6
我猜测WScript对象拥有CreateObject方法,因此任何Windows脚本语言都可以创建COM对象。
VBScript作为全局函数具备该能力,但其他Windows脚本宿主语言可能没有。
例如,JScript没有全局的CreateObject函数(我相信)(但是它有一个var a = new ActiveXObject("...")语法,因此在JScript中也不需要使用WScript.CreateObject)。
我猜这两个函数之间没有区别。
编辑:存在区别(但仅当您尝试在远程主机上实例化DCOM对象时),请参见@Thomas Petersen的答案。

4
JScript没有全局的CreateObject吗? WScript不能使用JScript吗? 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 ;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接