关于 VBScript 中的 CreateObject
本文主要记录,VBS中,CreateObject 和 WScript.CreateObject 的不同。
CreateObject 是什么:
他是一个 VBScript 的内置函数(Function),或者说是一个方法(Method),取决这个单词被用在了什么地方。
CreateObject 的作用:
微软官方文档说,它的作用是:Creates an Automation object of the specified class。翻译过来就是,用于创建一个指定类型的,自动化对象。而,An object is an instance of a class,所以,可以进一步解释为,它的作用是,创建一个指定 Class 的 Instance (实例)。不觉得,这个内置函数的作用,很像是 Python 里的 import xxx as y
么!
为什么要使用 CreateObject 函数:
VBScript 的运行环境中,自带的 Object 只有14个,或者说 Windows Scripting Host (WSH) 环境中,自带的 Object 只有14 个。因此能解决的问题比较有限,所以,VBScript 总会遇到,靠自带 Object 解决不了的问题。这时,为了解决问题(自动化),VBScript 就需要调用(借用)其他 “外部的Object” 或者 “程序”。那么,如何调用呢?答案就是,使用 CreateObject 函数!一个很好的例子就是,CreateObject("Excel.Application")
。这个例子是,VBScript 在调用外部的 Excel 对象,来自动化 Excel 操作!要是不太理解WSH,可以去看我另一篇文章:Windows Scripting Host (WSH) 是什么?
CreateObject 和 WScript.CreateObject 有什么不同:
细心的同学,或发现,在使用 CreateObject 函数的过程中,会在代码中,看到两种不同的情况:
- CreateObject (直接使用函数)
- WScript.CreateObject (作为 Wscript 的 Method 来使用)
那么这两种,使用方法,区别是什么呢?区别如下:
-
CreateObject 是 VBScript 的内置函数,属于语言的一部分;而 WScript.CreateObject 是 WSH 中 WScript 对象的 Method;在 VBS 语言中,CreateObject 总是可用的,而 WScript.CreateObject 只有在宿主为 wscript.exe 和 cscript.exe 的情况下才可以使;在 WMI、QTP、SecureCRT、EmEditor 等,其他宿主环境是无法使用的。
-
这两种函数,所使用的参数的,含义不同;它俩的第一个参数,含义是相同的,但是它俩的第二个参数,含义就完全不同了;CreateObject 的第二个参数用来通过 DCOM 在远程服务器上创建对象;而 WScript.CreateObject 的第二个参数用来创建本地对象并响应事件。
-
这两种函数的速度不一样;因为 CreateObject 是 VBS 的内置函数,不需要通过COM来调用,所以稍微快了一点点。
-
建议,尽量使用 CreateObject 函数,除非你需要响应事件;因为这样 可移植性更好、速度更快、代码更短。
参考阅读:
- CreateObject Method | Microsoft Docs
- Instance (computer science) - Wikipedia
- VBScript CreateObject Function
- VBS调用Windows对象中server.CreateObject和wscript.creatobject的区别_百度知道
- VBS中CreateObject和WScript.CreateObject的区别
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?