16

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

Wscript.CreateObject("some.object")

CreateObject("some.object")

在 VBScript 中?当我找到使用 的文档或示例时Wscript.CreateObject,我通常使用 重写CreateObject,因为它似乎总是有效,然后我可以轻松地在 HTA 或 ASP 中重用代码。但我一直想知道为什么这个功能存在,如果你在 VBScript 中使用一种或另一种方式,它会产生什么不同。

4

3 回答 3

28

当您只用一个参数调用它们时,两者之间没有区别。做完全相同的事情。

仅当您使用两个参数调用时,两者之间的区别才会显现出来。声明

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

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

做完全不同的事情:

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

(改编自TechNet,“将 VBScript CreateObject 和 GetObject 函数与 WSH 进行比较”一节。)

于 2009-04-24T20:17:56.390 回答
6

我猜这个WScript对象有这个CreateObject方法,所以任何 Windows 脚本语言都可以创建 COM 对象。

VBScript 作为全局函数具有这种能力,但其他 Windows Script 宿主语言可能没有。

例如,JScript 没有全局CreateObject函数(我相信)(但它有var a = new ActiveXObject("...")语法,因此您也不需要WScript.CreateObject在 JScript 中使用)。

我猜这两个功能之间没有区别。

编辑:有区别(但仅当您尝试在远程主机上实例化 DCOM 对象时),请参阅@Thomas Petersen 的答案。

于 2009-04-24T20:11:39.883 回答
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 ;
}
于 2011-03-09T00:13:46.940 回答