2009-04-24 6 views
12

Est-ce que quelqu'un sait le raisonnement derrière l'option à l'aide d'avoir:Quelle est la différence entre CreateObject et Wscript.CreateObject?

Wscript.CreateObject("some.object") 

et

CreateObject("some.object") 

au sein de VBScript? quand je trouve la documentation ou des exemples qui utilisent Wscript.CreateObject, je réécris habituellement en utilisant CreateObject, parce que cela semble toujours fonctionner, et puis je peux facilement réutiliser le code dans un HTA ou ASP. Mais je me suis toujours demandé pourquoi cette fonctionnalité existait et si la différence qu'elle fait si vous utilisez d'une manière ou d'une autre au sein de VBScript.

Répondre

23

Il n'y a pas de différence entre les deux, lorsque vous les appelez avec un seul argument. Le faire exactement la même chose.

La différence entre les deux est seulement en évidence si vous appelez avec deux paramètres. Les déclarations

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

et

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

faire des choses complètement différentes:

La fonction VBScript CreateObject interprète le second paramètre comme nom de l'ordinateur distant et tente de créer l'objet COM nommé sur cet ordinateur distant; Dans cet exemple, il essaie d'instancier une instance d'un objet avec ProgId de "some.object" sur un ordinateur distant nommé "AnotherParam". La méthode WScript CreateObject interprète le second paramètre en tant que préfixe de sous-programme à utiliser pour gérer les événements de l'objet. Les deux fonctions GetObject sont similaires.

(Adapté de TechNet, section "Comparaison des fonctions VBScript CreateObject et GetObject avec WSH".)

+0

Avez-vous un exemple de code complet à portée de main? – krlmlr

5

Je suppose que l'objet WScript a la méthode CreateObject de sorte que tout langage de script Windows peut créer des objets COM. VBScript a cette capacité en tant que fonction globale, mais pas d'autres langages hôtes Windows Script.

Par exemple, JScript n'a pas de fonction CreateObject globale (je crois) (il ne, cependant, ont une syntaxe var a = new ActiveXObject("..."), de sorte que vous n'avez pas besoin d'utiliser WScript.CreateObject dans JScript non plus).

Je suppose qu'il n'y a pas de différence entre les deux fonctions.

EDIT: Il est une différence (mais seulement si vous essayez d'instancier des objets sur des hôtes distants DCOM), voir la réponse par @Thomas Petersen.

3

JScript n'a pas CreateObject mondiale? WScript ne peut pas utiliser 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 ; 
} 
Questions connexes