В чем разница между CreateObject и Wscript.CreateObject? - PullRequest
15 голосов
/ 25 апреля 2009

Кто-нибудь знает причину использования опции:

Wscript.CreateObject("some.object")

и

CreateObject("some.object")

в VBScript? Когда я нахожу документацию или примеры, в которых используется Wscript.CreateObject, я обычно переписываю, используя CreateObject, потому что кажется, что это всегда работает, и тогда я могу легко повторно использовать код в HTA или ASP. Но я всегда удивлялся, почему эта функция существует и какая разница, если вы используете тот или иной способ в VBScript.

Ответы [ 3 ]

25 голосов
/ 25 апреля 2009

Нет разницы между ними, когда вы вызываете их только с одним аргументом. Делать то же самое.

Разница между ними очевидна только при вызове с двумя параметрами. Заявления

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

и

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

делай совершенно разные вещи:

Функция CreateObject VBScript интерпретирует второй параметр как имя удаленного компьютера и пытается создать именованный COM-объект на этом удаленном компьютере; в этом примере он пытается создать экземпляр объекта с ProgId «some.object» на удаленном компьютере с именем «AnotherParam». Метод WScript CreateObject интерпретирует второй параметр как префикс подпрограммы, который будет использоваться при обработке событий от объекта. Две функции GetObject связаны друг с другом.

(Адаптировано из TechNet , раздел «Сравнение функций VBScript CreateObject и GetObject с WSH».)

5 голосов
/ 25 апреля 2009

Я предполагаю, что у объекта WScript есть метод CreateObject, поэтому любой язык сценариев Windows может создавать COM-объекты.

VBScript имеет такую ​​возможность как глобальную функцию, но другие языки хоста Windows Script могут и не иметь.

Например, JScript не имеет глобальной функции CreateObject (я полагаю) (однако, он имеет синтаксис var a = new ActiveXObject("..."), поэтому вам не нужно также использовать WScript.CreateObject в JScript).

Я полагаю, что нет никакой разницы между этими двумя функциями.

РЕДАКТИРОВАТЬ : представляет собой разницу (но только если вы пытаетесь создать экземпляр объектов DCOM на удаленных хостах), см. Ответ @Thomas Petersen.

4 голосов
/ 09 марта 2011

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 ;
}
...