8VBScript中的类(编写COM对象)

8.1 对象、类和组件

可以利用一些面向对象的优点。

对象是复杂数据和程序结构在内存中的表现,只有在程序运行时才存在。

类是对象的模板。在设计时就能直接使用的程序设计结构。

类是代码,而对象是在程序运行时对这段代码的使用。

组件只是一种打包机制,一种将一个或多个相关类编译成一个可以部署到一台或多台计算机上的二进制文件的方法。组件中可以用于创建对象的类。在Windows操作系统中,组件通常都是一个.DLL或.OCX文件。

人们发现将类打包成独立于程序的组件更有效率。

8.2 类语句

通常,您必须将定义VBScript类的代码与创建类实例的代码放在一起。但是为了方便代码的移植和重用,用下面的方法突破这个限制:

·       将一个或若干个VBScript类打包成Windows组件,在第16章component中会对此做深入探讨。

·      使用ASP的# INCLUDE指示符,将类的定义存放到一个文件中,并在多个ASP页面中包含它。第20章会探讨ASP脚本中的VBScript类。

本章中我们只会探讨与使用类的代码定义在用一个脚本中的类。

8.3 定义属性

在脚本根据类创建对象时,属性是存储和访问数据的机制。

8.3.1 私有属性变量

存储属性的值的最好方式就是私有属性变量。这是定义为类级作用域的变量。使用类的代码通过Property Let、Set和Get过程与其进行交互。对于类作用域的私有变量,必须用Private语句声明。m前缀是匈牙利命名法中表示模块级作用域的,也就是类级。

8.3.2 Property Let

Property Let过程是一种特殊的过程,用于在类的外部给私用属性变量赋值。至少一个参数。Property Let过程类似于VBScript中没有返回值的子过程。

Class Customer

Private mstrName

Public Property Let CustomerName(strName)

mstrName = strName

End Property

End Class

如果要跳出属性过程,可以使用Exit Property语句。

8.3.3 Property Get

Property Get过程则是允许类外部的代码读取私有属性变量的值。Property Get有返回值。

Class Customer

Private mstrName

Public Property Get CustomerName()

CustomerName = mstrName

‘Set CustomerName = mstrName ‘If the private property is the object, use Set

End Property

End Class

与VBScript的Function过程类似。如果Property Get过程返回的是一个指向对象变量的引用,就可能需要用Set语句返回这个值。

因为所有的VBScript变量都是Variant变量,所以Set语法并不是不可或缺的。但是还是应该使用Set语法!

8.3.4 Property Set

Property Set过程与Property Let过程很类似,但是Property Set过程是针对基于对象的属性。当需要在属性中存放对象(而不是数字、日期、布尔或字符串子类型的变量),就可以提供一个Property Set过程取代Property Let过程。

Class FileHelper

'Private FileSystemObject object

Private mobjFSO

Public Property Set FSO(objFSO)

Set mobjFSO = objFSO

End Property

End Class

从功能上来说,Property Let和Property Set过程的功能是一样的。但是Property Set过程有两个不同之处:

●明确地说明这个属性是一个基于对象的属性(任何使得代码意义更明确的技术都比其他功能相同的技术更受偏爱)。

●类外部的代码必须用Set Object.Property= Object才能写入这个属性(因为这是实现该功能的典型方法,所以这也是优点)。

8.3.5 创建只读属性

有两种方法可以创建类的只读属性:

●只为这个属性提供Property Get过程。(推荐)

●将Property Get过程声明为公共的,而将Property Let过程声明为私有的。(因为类内部的代码可以直接修改这个私有属性变量,所以这没有什么实际意义,并不需要私有的Property Let过程。但即使在这种情况下,类内部的代码也最好是用Property Let过程,而不是直接修改这个私有属性变量。)

8.3.6 创建只写属性 (与“创建只读属性”相反)

8.3.7 没有属性过程的公共属性

还可以为您的类提供没有Property Let、Get和Set的属性。这是通过使用公共类级变量实现的。

Class Customer

Public Name

End Class

关于这个问题,优秀的程序员也有不同的看法,但是您会发现大多数程序员喜欢用Property Let、Get、Set过程,而不是公共类级变量。

8.4 定义方法

方法(method) 语法跟定义VBScript函数和过程的语法是一样的。唯一需要额外考虑的就是应该声明为公共的还是私有的。

类外部的代码可以调用public(公共)方法,这是公共的;但是不能调用private(私有)方法,因为这是私有的,只能在内部使用。

8.5 类事件 (钩子程序)

事件(event)是一种会自动被调用的特殊方法。在任何特定的环境中,您所使用的类都支持一个或若干个事件。当给定的环境中支持某个事件时,您可以编写一个事件处理器(event handler),这实际上就是在事件发生时会自动调用的特殊方法。比如,在浏览器中,当用户单击按钮时,页面中的VBScript代码可以对这个按钮的OnClick事件做出响应。

任何VBScript类都自动地支持两个事件:Class_Initialize和Class_Terminate。

8.5.1 Class_Initialize事件

当有代码根据类实例化出一个对象时就会引发类中的Class_Initialize事件。类可以没有,有的话最多一个这个Class_Initialize事件。

比如, 可以在Class_Initialize事件处理器中设置它的初始值,和其他的准备工作,比如打开数据库连接或打开文件。

语法:处理器的第一行必须是Private SubClass_Initialize,并且最后一行必须是EndSub。

Private Sub Class_Initialize

Set mobjFSO = WScript.CreateObject("Scripting.FileSystemObject")

End Sub

从技术上来说,您可以用Public语句(而不用Private)声明事件处理器,但是事件处理器通常都是私有的。

8.5.2 Class_Terminate事件

当基于这个类的对象被销毁时则会触发Class_Terminate事件。

两种销毁对象的方法:

●将特殊值Nothing赋给最后一个引用了该对象的对象变量

●超出了最后一个引用该对象的对象变量的作用域

当对象被销毁时,其私有的对象变量也会超出其作用域,脚本引擎会自动地将其销毁。

可以用Class_Terminate事件关闭数据库连接、关闭文件或是将类的某些信息保存到数据库或文件中。

8.6 类常量

VBScript不支持声明类级的具名常量。也就是说,不能在类中使用Const语句声明供类内部或外部代码使用的常量。

可以这样做:类中声明变量,。然后在Class_Initialize事件处理器中将您希望的“常量”值赋给TEST_CONST变量。全大写的命名方式提醒类的其他地方不修改这个值。这里创建了一个伪常量。

8.7 构建和使用VBScript

在设计时,要将类按逻辑分割开,尽量减少类之间不必要的交互。类之间的交互越少越好。应该尽可能地将类设计为一个“黑箱”;可以使用黑箱的功能,可以知道它的输入输出,但是无法看到其内部的工作方式。

‘创建一个类的实例,即new一个对象

Set objName = New ClassName

如果用自定义的VBScript类实例化一个对象,使用New;否则,用CreateObject。

9章 正则表达式

BScript并不支持正则表达式常量(就像/a pattern/),而是将文本字符串赋给RegExp对象的Pattern属性。

‘正则表达式示例:

Set re = New RegExp

re.Pattern = "France"

s = "The rain in France falls mainly on the plains."

re.Replace(s, "Spain")

Global属性负责设置或返回一个Boolean值,指明模式是匹配整个字符串中所有与之相符的地方还是只匹配第一次出现的地方 。如果Global属性的值是True,那就会对整个字符串进行查找;否则就不会。默认值是False—— 并不是微软的某些文档中说的True 。

IgnoreCase属性负责设置或返回一个Boolean值,指明模式匹配是否大小写敏感。默认是False——并不是微软的某些文档中说的True 。

Pattern属性设置或返回用于搜索的正则表达式。

Replace方法用于替换在正则表达式搜索中找到的文本。

Test方法对字符串执行正则表达式搜索,并返回一个布尔值说明匹配是否成功。

Execute方法将正则表达式应用到字符串上并返回Matches集合。记住Execute的结果是一个集合,甚至很有可能是一个空集合。可以用ifre.Execute(s).count = 0或专门为这个目的设计的Test方法来测试它。

Matches集合的属性: (只有两个属性) 1. Count返回集合中的元素数量;2. Item根据指定的键返回元素。

Set colMatches = re.Execute(s)

MsgBox colMatches.count

MsgBox colMatches.item(0)

Match对象:Match对象是Matches集合中的成员。

Match的三个属性都是只读的:FirstIndex,Length以及Value。(匹配的位置的索引,匹配字符串的长度, 搜索到的匹配字符串) 。

Backreferencing:一个被记住的匹配结果就是模式的一部分。这就是所谓的backreferencing。需要用圆括号指定需要存储在临时缓存中的部分。每个捕获到的匹配结果都会按匹配到的先后次序存放(在正则表达式模式中从左到右)。存放匹配结果的缓存从1开始编号,最大可以到99。可以依次用$1、$2之类的变量访问它们。

QTP:In addition,the Replace method can replacesubexpressions in pattern.

可以用非捕获元字符("?:"、"?="或"?!")跳过正则表达式中的某些部分。

示例:

Dim re, s

Set re = New RegExp

re.Pattern = "(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)"   ‘圆括号来控制划分部分。

s = "VBScript is not very cool."

MsgBox re.Replace(s, "$1 $4 $2 $5")       ‘"VBScript very is cool." 显示匹配的第1,4,2,5部分。

一些正则表达式的示例:

‘分解URI

re.Pattern = "(\w+):\ / \ /( [^ /:]+)(:\d*)?( [^ # ]*)"

‘匹配HTML注释标签

re.Pattern = "^.*<!--.*-->.*$"

‘匹配空白

re.Pattern = "^[ \t]*$"           ‘空行或是只有空白(空格和制表符)的行

15Windows脚本宿主

这是因为VBScript被设计为一个ActiveX脚本引擎,被用于为ActiveX脚本宿主环境提供脚本运行的功能。

有两种最普通的宿主:活动服务器网页(Active Server Pages,ASP); Internet Explorer. 有一定的局限性, ,InternetExplorer不提供脚本与本地计算机(如文件系统、寄存器访问等)的交互能力.所以需要Windows脚本宿主(Windows ScriptHost,WSH)。WSH完全是一个兼容各种脚本语言的宿主接口,是可以处理各种有ActiveX接口脚本语言(如Jscript)的引擎。

15.1 相关工具:

WSH引擎; (windows系统一般作为组件自带WSH)

文本编辑器;

如果想使用除VBScript或JScript之外的某种脚本编写语言,就需要下载相应的ActiveX脚本引擎.

15.2 WSH的概念

WSH是一个Windows管理工具。WSH创建了一个脚本运行的主环境。

15.3 脚本文件的类型

这就是Windows脚本宿主文件(WSF文件)的有用之处。WSF文件可以包含其他的脚本文件作为其脚本的一部分。这意味着多个WSF文件可以引用创建并保存在同一地点的库和有用的函数。

15.4 使用Windows脚本宿主运行脚本

WSH提供了两个用于执行脚本的接口,一个用于命令行,一个用于Windows环境。这两个接口各使用不同的宿主程序作为VBScript引擎:

● cscript.exe:用于在命令行中运行脚本 (cscriptc:\folderName\YourScriptName.vbs)

● wscript.exe:用于在Windows环境中运行脚本 (wscriptc:\folderName\YourScriptName.vbs)

之所以有两个宿主程序,是因为cscript.exe被设计为从控制台窗口启动(一般来说是Windows中的MS-DOS窗口),而wscript.exe则用于直接与Windows GUI进行交互。这两者就功能来讲几乎没有区别。

15.5 使用.WSH文件运行脚本

15.6 Windows脚本宿主的内建对象

15.6.1 WScript对象

WScript Object : root object for the Windows Script Hostobject model hierarchy.

provides access to information such as:

·       command-line arguments,

·       the name of the script file,

·       the host file name,

·       and host version information.

The WScript object allows you to:

·       create objects,

·       connect to objects,

·       disconnect from objects,

·       sync events,

·       stop a script's execution programmatically,

·       output information to the default output device(either a Windows dialog box or the command console).

‘不需要创建WScript 对象,系统默认调用WScript.exe

Properties

ArgumentsProperty | BuildVersionProperty | FullNameProperty (WScript Object) | InteractiveProperty | NameProperty | PathProperty | ScriptFullNameProperty | ScriptNameProperty | StdErrProperty | StdInProperty | StdOutProperty | VersionProperty

ArgumentsProperty:object.Arguments (Returns the WshArgumentsobject (a collection of arguments).

参数从0开始:

Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next

FullName属性:宿主可执行文件(cscript.exe或wscript.exe)的有效完整路径。

Msgbox WScript.FullName

Name属性返回WScript对象(宿主可执行文件)的名称:

WScript.Echo WScript.Name

Path属性返回包含宿主可执行文件(cscript.exe或wscript.exe)的目录名。

WScript.Echo WScript.Path

ScriptFullName属性返回当前正在运行的脚本的完整路径。

ScriptName属性返回当前正在运行的脚本的文件名。

WScript.Echo WScript. ScriptFullName

WScript.Echo WScript.ScriptName

Interactive属性设置脚本的模式,或识别脚本的模式。使用该属性会返回一个布尔值。有两种可用的模式:批处理模式和交互模式。在交互模式下(默认情况),脚本可以与用户进行交互。可以向WSH输入信息,WSH也可以输出信息,信息被显示在对话框中,等待用户提供反馈。在批处理模式中,不支持用户交互,不支持WSH的输入和输出。可以使用WSH命令行开关脚本模式//I(交互模式)和//B(批处理模式)来设置脚本模式。

WScript.Interactive = false       ‘set interactive model

WScript.Echo WScript.Interactive            ‘pop up the interactice value

StdErr属性开放当前脚本的只写的错误输出流。该属性返回一个标识标准错误流的对象。只有使用cscript.exe时才能访问StdIn、StdOut和StdErr流。使用wscript.exe时如果想访问这些流就会产生一个错误。

StdIn属性开放当前脚本的只读的输入流。该属性返回一个标识标准错误流的对象。

StdOut属性开放当前脚本的只写的错误输出流。该属性返回一个标识标准错误流的对象。

Set streamOut = WScript.StdOut

Set streamIn = WScript.StdIn

Set streamErr = WScript.StdErr

Dim strExt, strLineIn

Dim intMatch

strExt = WScript.Arguments(0)

intMatch = 0

Do While Not streamIn.AtEndOfStream

strLineIn = streamIn.ReadLine

If 0 = StrComp(strExt, Right(strLineIn, Len(strExt)), vbTextCompare) Then

streamOut.WriteLine strLineIn

intMatch = intMatch + 1

End If

Loop

Methods

ConnectObjectMethod | CreateObjectMethod | DisconnectObjectMethod | EchoMethod | GetObjectMethod | QuitMethod | SleepMethod

CreateObject用于创建一个COM对象。

object.CreateObject(strProgID[,strPrefix])

strProgID:值为字符串,表示想要创建的对象的程序标识符(ProgID)。

strPrefix:可选。值为字符串,表示函数前缀。

strPrefix:可选。值为字符串,表示函数前缀。

使用CreateObject方法和strPrefix参数创建的对象是已连接对象。对象被创建后,其输出接口与脚本文件相连接。每个事件函数都由这个前缀加上事件的名称来命名。如果创建对象时没有使用strPrefix参数,也可以使用ConnectObject方法同步对象的事件。

Set WshNetwork = WScript.CreateObject("WScript.Network")

ConnectObject将对象的事件源连接到具有给定前缀的函数。

object.ConnectObject(strObject,strPrefix)

strObject:必需的。表示想要连接的对象名称的字符串。

strPrefix:必需的。表示函数前缀的字符串。

WScript.ConnectObject RemoteScript, "remote_"

DisconnectObject 用于断开已连接对象的事件源的连接。

object.DisconnectObject(obj)

obj:表示想要断开连接的对象名称的字符串。

但是,有一点很重要,那就是断开连接后对象仍然能够产生事件。

Echo 法输出一个消息框或一个命令控制台窗口。

object.Echo [Arg1] [,Arg2][,Arg3] ...

WSH引擎

文 本 输 出

Wscript.exe

图形消息框

Cscript.exe

命令控制台窗口

GetObject: 根据指定的ProgID获取某个已存在对象,或从文件创建一个新的对象。

object.GetObject(strPathname[,strProgID], [strPrefix])

strPathname:包含将对象保存到磁盘的文件所使用的完整的有效路径名。

strProgID:可选。值为字符串,表示想要创建的对象的程序标识符(ProgID)。

strPrefix:可选。进行对象事件同步时有用。如果提供了strPrefix参数,WSH就会在创建对象之后将对象的输出接口连接到脚本文件。

Set MyObject = GetObject("C:\DRAWINGS\SCHEMA.DRW")

MyApp = MyObject.Application

Quit强制脚本在任意时刻立即停止执行。

object.Quit([intErrorCode])

ntErrorCode:可选。返回一个整数值,作为进程的返回码。如果忽略intErrorCode参数,就不会有返回值。Quit方法可以用于返回一个可选的错误代码。如果Quit方法是脚本中的最后一条命令(并且不需要返回一个非零值),就可以不使用任何参数,这样脚本就会正常退出。

object.Sleep(intTime)

15.6.2 WshArguments对象

Set objArgs = WScript.Arguments

WshArgument对象的item属性和count方法:

Set objArgs = WScript. Arguments

For x = 0 to objArgs.Count - 1

WScript.Echo objArgs(x)

Next

15.6.3 WshShell对象

可以用于获取系统环境变量的访问、创建快捷方式、访问Windows的特殊文件夹,如Windows Desktop,以及添加或删除注册表条目。还可以使用Shell对象的功能创建更多的定制对话框以进行用户交互。

Set WshShell= WScript.CreateObject( "WScript.Shell" )

WshShell对象有三个属性:

● CurrentDirectory :该属性获取或更改当前活动目录。

● Environment :该属性返回WshEnvironment对象(一个环境变量集合)。

object.Environment([strType])

strType:可选。指定环境变量的位置。

Environment属性包含WshEnvironment对象(一个环境变量集合)。如果指定了strType,就指定了环境变量所在的级别的值:System;User;Volatile;Process。

●SpecialFolders:特殊文件夹的名称。

WshSpecialFolders对象是一个集合,它包含所有的Windows特殊文件夹,其中包括Desktop文件夹、Start Menu文件夹和Documents/My Documents文件夹

WshShell对象的方法:所有这些方法都与操作系统shell相关,可以用于控制Windows注册表,也可以创建弹出式消息框和快捷方式以及激活和控制正在运行的应用程序。

AppActivate :这个方法可以用于激活一个指定的已经打开的应用程序窗口。

CreateShortcut:该方法可以用于创建一个新的快捷方式,或打开一个已有的快捷方式。

ExpandEnvironmentStrings:该方法返回环境变量的扩充值。这个方法只对PROCESS环境空间内定义的环境变量进行扩充(增加)。

LogEvent:LogEvent方法向日志文件中添加一个事件条目。

Popup:该方法用于在弹出式消息框中显示文本。

RegDelete : 该方法从注册表中删除一个键或其键值。

RegRead :该方法返回注册表中一个键或键值的名称。

RegWrtie:该方法可以创建一个新键,给现有键添加另一个键值名(并指定一个值),或修改现有键值名的值。

Run :该方法在一个新进程中运行一个程序。

SendKeys : 向活跃窗口发送一次或多次击键(仿佛来自键盘)。

Exec: Exec方法在一个子命令解释器中运行一个应用程序,子命令解释器提供对StdIn、StdOut和StdErr流的访问。

15.6.4 WshNamed对象

WshNamed对象提供从命令行中对有名称参数的访问。WshArguments对象的Named属性返回WshNamed对象,这是一个有名称参数的集合。

15.6.5 WshUnnamed对象

WshUnnamed对象提供了从命令行中对未命名对象的访问。它是一个由WshAruments对象的Unnamed属性返回的只读集合。从该集合中获取单个参数值时,使用由0开始的索引。

15.6.6 WshNetwork对象

WshNetwork对象提供对计算机所连接的网络上共享资源的访问。如果想连接到网络共享或网络打印机,从网络共享或网络打印机断开连接,映射或删除网络共享,或访问网络上某一用户的信息,都需要创建一个WshNetwork对象。

Set WshNetwork = WScript.CreateObject("WScript.Network")

15.6.7 WshEnvironment对象

WshEnvironment对象提供对Windows环境变量集合的访问。

这个对象是一个由WshShell对象的Environment属性返回的环境变量集合。该集合包含全部的环境变量(包括有名称的和没有名称的)。

要获取集合中某个具体的环境变量(及其值),可以使用环境变量名作为索引。

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")

WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

15.6.8 WshSpecialFolders对象

WshSpecialFolders对象提供对Windows特殊文件夹集合的访问。

15.6.9 WshShortcut对象

WshShortcut对象允许您使用脚本创建快捷方式。

15.6.10 WshUrlShortcut对象

WshUrlShortcut对象允许您使用脚本创建到Internet资源的快捷方式。该对象是WshShell对象的子对象。必须使用WshShell方法的CreateShortcut来创建WshUrlShortcut对象。

16Windows脚本组件(Windows Script Component)

16.1 什么是Windows脚本组件

是XML和脚本代码混合的COM组件,运行在服务器端,执行各种任务。

Windows脚本组件是一种解释执行的COM组件(之所以要解释执行,是因为VBScript和所有其他的脚本语言都是解释执行的)。从结构上讲,它们是包含脚本代码的基于XML的文件。在这些文件中,可以使用VBScript、Jscript、Python、PScript、PERLScript,或其他脚本语言。

脚本组件完全就是COM组件,能够调用其他的COM组件。

16.2 需要的工具

VBScript 5.0的库或更高版本;

Internet Explorer 5.0或更高版本;

脚本组件向导(Script ComponentWizard)(可选)::虽然只需要Notepad再加上一定的想象力就可以创建Windows脚本组件,但如果想编写很多脚本,手工编写就会变得很乏味。Microsoft提供了脚本组件向导。可以加速脚本组件框架的创建;

脚本组件的文档副本(可选,但可能比较有用,尤其是如果要处理一些复杂的工作时);

16.3 脚本组件运行时

因为脚本组件在运行时(也就是启动之后)是解释执行的,所以在客户端系统上需要安装一个解释器。脚本组件运行时(scrobj.dll)是一个用于控制客户端与脚本组件之间的调用的解释器。

脚本调用一个对象(比如Set objMath = CreateObject("Math.WSC"))à在注册表中的HKEY_CLASSES_ROOT下搜索Math.WSC注册表项à 获得COM组件的信息;

当调用CreateObject语句时,实际上创建的是scrobj.dll组件。scrobj.dll文件会查看ScriptletURL键来确定组件的实际位置。

16.4 脚本组件文件和向导

在windows操作系统(Start|Programs|MicrosoftWindows Script|Windows Script Component Wizard快捷方式)打开脚本组件向导, 一步一步创建组件。

16.5 暴露属性、方法和事件

要记住,脚本组件可以实现除COM对象以外的组件,因此可以用它创建ADO组件、访问LDAP(LightweightDirectory Access Protocol,轻量级目录访问协议)和Exchange,或调用Microsoft Word或Excel。任何东西都可以用脚本组件来表示。

16.5.1 属性

脚本组件中的属性可以是Read/Write、Read-Only或Write-Only。在脚本中,它们是使用<property></property>标记来实现的。在这些标记中,可以为属性设置get和put选项。get 选项用于读取数值,put选项用于写入属性。

在属性的get和put函数中可以加入任何额外的控制逻辑。

<property name="ReadOnlyProperty">

<get/>

</property>

<property name="WriteOnlyProperty">

<put/>

</property>

<property name="ReadWriteProperty">

<get/>

<put/>

</property>

16.5.2 方法

脚本组件中的方法是在脚本文件的对象定义部分使用<method></method>标记定义的。方法的参数使用一个<parameter>定义其值.

默认情况下都是脚本组件中的一个函数,并且没有指定返回值类型,因为所有的变量都是variant数据类型。但是,可以自由使用子过程作为方法来取代函数。

注意,所有使用Windows脚本组件向导创建的方法都返回“Temporary Value”,需要修改这个返回值.

<public>

<method name="mNoParameters">

</method>

<method name="mWithParameters">

<PARAMETER name="var1"/>

<PARAMETER name="var2"/>

</method>

</public>

‘实际的方法代码是在脚本组件的脚本标记中定义的。

<script language="VBScript">

<![CDATA[

Function mWithParameters (var1, var2)

Multiply = "Temporary Value"

End function

]]>

</script>

WSC文档中没有介绍在方法的参数声明中使用byval(传值)和byref(传引用)关键字。VBScript中,默认情况下所有的值都是以byref方式传递的,所以方法中对变量的任何修改都会改变调用函数中该变量的值。 JScript变量都是以byval方式传递的,因为JScript不能以byref方式传递变量。

16.5.3 事件

事件是在脚本文件的对象定义中在<event></event>标记中定义的。

<script language="VBScript">

<![CDATA[

function mNoParameters()

FireEvent("MethodCalled")

mNoParameters = "Temporary Value"

end function

sub MyComponent_MethodCalled()

'some event handling code

end sub

]]>

</script>

脚本组件还可以在脚本定义中使用一个<implement>标记处理事件。在脚本组件中捕获事件的语法定义如下:

<implements type="COMHandlerName" [id="internalName"] [default=fAssumed]>

handler-specific information here

</implements>

COMHandlerName是处理程序(ASP或行为)或被处理的COM对象的名称。

16.6 注册信息

要注册一个Windows脚本组件,机器上需要有脚本组件运行时(scrobj.dll),和一个合法的脚本组件文件(.wsc),并且要正确注册。

1.    右键单击组件文件, 并在弹出菜单中选择Register或Unregister来注册和注销脚本组件。

2.    使用regsvr32.exe命令:regsvr32 path/component_name.wsc

3.    也可以在脚本中添加一个注册条目以定义注册行为。

Windows脚本组件可以远程注册。(这里不讨论,需要时再参考)

‘脚本里怎样使用注册好的组件

set obj = wscript.createobject("math.wsc")

obj.method(var1, var2)

set obj = nothing

16.7 创建脚本组件类型库

要为一个脚本组件生成一个类型库,只要右键单击脚本组件文件并在弹出菜单中选择Generate TypeLibrary选项。

16.9 ASP的脚本组件

16.10 编译时错误检查

16.11Script组件中使用VBScript

在XML文件的数据部分中使用<script></script>标记将一个标准的VBScript类集成到一个Windows脚本组件中。

<script language=‖VBScript‖>

<![CDATA[

class <classname>

<internal class declaration>

end class

16.11.1 VBScript类的使用限制

脚本组件并不知道内部类的结构信息。要把这个类暴露给外部实体,必须将类信息封装在方法和属性中,并声明在脚本组件文件中。

如果定义了很多类,可以通过源文件包含和提供COM封装器的方式来定义类。这里要记住的是,VBScript类不能自动地被暴露给COM,所以必须提供某种机制使其他对象能够访问类。

16.11.2 使用内部类

和在QTP使用内部类是一致的。

set oMath = new clsMath

16.11.3 包含外部源文件

对于COM来说,内部类声明和外部类声明是等价的。

示例:把所有的类声明在math.vbs,再导入进来。

<script language="VBScript" src="math.vbs">

<![CDATA[

private oMath set oMath = new clsMath

VBScript 程序员参考手册 读书笔记08-相关推荐

  1. 高效能程序员的修炼 --读书笔记

    高效能程序员的修炼 –读书笔记 这是我读完Jeff Atwood的<高效能程序员的修炼>这本书后的一些回顾, 我会根据这本书的章节依次写下对每章节的理解和认识. 高效能程序员的修炼 读书笔 ...

  2. 《高效能程序员修炼》读书笔记

    读到这本书的时候也已经入行了,书中提到程序员所渴望的东西,我一下子陷入沉默.这个问题刚开始看觉得有些可笑,但是慢慢想发现这个问题如果不想明白这辈子就稀里糊涂的做增删改查吗? 谈梦想不仅仅是小孩子的专利 ...

  3. 程序员的数学读书笔记(全)

    https://www.jianshu.com/p/28a8e58f37aa 第1章 0的故事 计数法分为按位计数法和罗马计数法 按位计数法常用的有2进制.8进制.10进制.16进制等几种. 理论上多 ...

  4. 《程序员羊皮卷》---- 读书笔记

    张大志著 书有历史了,在我上大学的时候,雷总就看了这本书.如果能在上学期间就接触到书中关于工作选择的内容,那么就可以早早的有的放矢,成为企业需要的人才,并且最重要的是避免被企业忽悠!. 内容主要看了职 ...

  5. 程序员的修养--读书笔记

    第一章 温故而知新 -- cpu.内存.显示设备.io设备早期都链接在一个总线上.后来出现了北桥芯片使得cpu,内存和高速的图形设备能够高速的交换数据.南桥芯片处理低速设备,比如磁盘,usb,键盘,鼠 ...

  6. Star Schema完全参考手册读书笔记二

    本博客继续就书中的一些术语和概念进行总结. 数据仓库体系结构 数据仓库描述任何包含分析型数据库的解决方案,包括独立型数据集市.该术语并不表示一个中心或集成仓库. 企业数据仓库指的是企业信息化工厂的中央 ...

  7. Star Schema完全参考手册读书笔记八

    本博客主要对书中横向钻取进行归纳总结. 横向钻取: 与对数据的上钻或下钻操作无关,它描述的是跨越一个星型模式到另外一个星型模式的步骤.该术语意在描述跨多个过程. 尽管横向钻取操作通常被称为横向钻取查询 ...

  8. Star Schema完全参考手册读书笔记五

    本博客就第三章缓慢变化维和多维数据集的有关知识进行总结. 缓慢变化维 采用维度设计方案时,确定数据源的变化情况在维度表中如何表示非常重要.这一现象称为缓慢变化的维度,简称缓慢变化维.该术语的名称反映了 ...

  9. Star Schema完全参考手册读书笔记四

    本博客主要内容为对书中第三章事实表特性的知识的总结. 事实表特性主要包括粒度.可加性.稀疏性和退化维. 事实表特性 事实分为可加事实,半可加事实和非可加事实. 每个事实表通过获取描述业务过程的度量来表 ...

  10. Star Schema完全参考手册读书笔记三

    本博客重点总结第三章基本原理中的维度表特性. 维度表特性 代理键 星型模式中,每个维度表都分配有一个代理键.代理键仅仅是为数据仓库和数据集市创建的.代理键通常表现为整数,在星型模式加载时的获取.转换. ...

最新文章

  1. Delphi V7.0企业汉化版及注册码
  2. json中omitempty字段的使用
  3. python中可选参数是什么意思_Python如何定义有可选参数的元类
  4. 脚本 api_从脚本到预测API
  5. 使用 DataAdapter 和 DataSet 更新数据库
  6. 深入理解 nvidia-docker 2.0
  7. Makefile-filter和filter-out
  8. [导入]jbuilder 2006开发struts+sqlserver2K准备工作
  9. 数据结构———>队列
  10. Atitit 资源类型的分类法规范MIME类型类型 目录 1.1. 一个MIME类型至少包括两个部分:一个类型(type)和一个子类型(subtype)。 1 1.2. 命名格式MIME类型包括一个
  11. Confluence 6 使用 Decorator 宏
  12. hikaricp mysql_HikariCP 个人实例
  13. Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization
  14. MySQL复制表结构、表数据的方法
  15. 使用Foxmail添加outlook和gmail
  16. Chrome导出扩展程序
  17. 学计算机毁一生,为什么说学医毁三代学法毁一生
  18. .bat文件闪退,原因及解决
  19. 新方法破解Wi-Fi WPA2加密平均只需10分钟
  20. STM32L051xx的时钟配置

热门文章

  1. 推荐一个完全免费的高质量素材网站
  2. linux7.4邮件服务器,Centos7.4搭建邮件收发服务器(部署篇)
  3. 大学机器人类公选课(ROS机器人高效编程)申请表、大纲、部分教案、进度表等材料分享
  4. 西南科技大学OJ题 平衡二叉树的判定1077
  5. ubuntu16.04下微信和TIM的安装
  6. C#代码整洁之道:代码重构与性能提升
  7. 阿克曼函数Ackerman
  8. 香港 三星 android6.0,【极光ROM】-【三星S20(国行/港版/台版/韩版/美版) G981X-高通865】-【V6.0 Android-Q-TJA】...
  9. linux系统如何重置密码
  10. 大数据之Superset