◎简单WSC组件的基本结构

    技术2022-05-11  55

    WSC是微软公司提供的使用脚本语言来创建 COM 部件的便利途径,它可以应用于支持 COM 部件的应用程序。WSC采用XML语言编写。一个标准的WSC组件本身涉及到XML标记相当复杂,但幸好它的结构非常规范,了解结构,填入代码,一个WSC脚本部件就可以工作了。就我个人而言,把WSC部件分成三个部分:注册部分,定义属性、方法、事件部分和实现部分。

    1、注册部分:主要包含了向注册表注册部件时需要填写的信息。一般包含了部件描述、版本信息、progid、clsid等四个内容。基本格式如下:<registrationdescription="部件描述的信息"version="部件的版本号"progid="XXXX.XXX"        /程序IDclsid="xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"/>需要说明的是:①registration是XML标记。②progid是VBS通过CreateObject函数通过绑定组件创建实例时的标志,一个组件如果没有ProgId,几乎是无法使用的。例如:Set obj=CreateObject("scripting.filesystemobject")代码中的scripting.filesystemobjec就是ProgId。③Clsid是部件在注册表项中的唯一标志,系统注册时把有关部件的信息放在注册表中,应用时通过读取注册信息,应用程序可以找到并载入该部件。可以使用Uuidgen.exe 的程序随机生成。当然如果你不指定Clsid,系统注册时regsvr32会为它自动创建一个,但正常情况下应该指定一个。由于我的计算机上没有安装VC,所以Uuidgen.exe和GUIDGen.exe文件,Clsid从一直是我极为头疼的问题,幸好UMU给出了一个脚本产生,现把代码抄录如下:Dim objSLTLSet objSLTL = CreateObject( "Scriptlet.TypeLib" )Wscript.echo objSLTL.GUIDSet objSLTL = Nothing

    2、定义属性、方法、事件部分在这个部分定义了用户在脚本中可以使用的属性、方法、事件,其基本结构如下:<Public><property name="属性一" ><get/>       <Put/></property>

    <method name="方法一">       <parameter name="参数一"/></method>

    <event name="事件一">       <parameter name="参数一"/></event></Public>其中Public是XML的标记,property、method、event标记分别定义了部件属性、方法、事件。Name标记定义了其名称,Parameter标记定义了其参数。作为property标记来说,本身带有两个子标记,它们分别是<get/><put/>,它们两个分别定义了读写属性的方式。当需要读写属性的时候,就会自动执行它们中的一个。在实现部分中,它们会以Put_属性名 或者 Get_属性名的形式出现。如果忽略了<get/>标记,则此属性是只可写的,忽略了<Put/>标记,说明此属性是只读的。作为vbs脚本,在脚本中响应事件的机会是比较少的,对此也就不再详细的说明。

    3、实现部分在上一部分定义的所有的属性、方法、事件的实现函数都必须包含在<Script>标记中。结构如下:<script language="VBScript"><![CDATA[定义公用变量进行初始化Function 函数名称()函数实现End funciton]]></script>抛开XML的标记不管,我们只需要有关的部分进行修改就可以了。在Public部分定义的属性和方法,在本部分必须定义相应的变量和函数。当然,WSC作为一个XML格式的文件,一些基本的标记还是需要知道的,下面有关标记说明摘自微软。<component>和<package>元素:<component> 元素包含的是一个完整的脚本部件定义。在同一个 .wsc 文件中可以出现多个 <component> 元素,但这些元素应包含在一个 <package> 元素内。<registration>元素:包括用来将脚本部件注册为 COM 部件的信息。<public>元素:包含脚本部件所说明的属性、方法和事件的定义。这些定义指向定义在独立的 <script> 块中的变量或函数。<implements>元素:给脚本部件指定COM接口处理程序,这将确定该脚本部件属于哪种COM部件类型。例如,通过指定 <implements type=ASP>,就可以实现 ASP 接口处理程序,并因此在脚本部件中可以访问ASP对象模型。 <public>元素:指定了脚本部件将实现 COM Automation 接口处理程序。因此,对 Automation 处理程序无需创建<implements>元素。 <script>元素:包含用来实现脚本部件逻辑的脚本,这取决于所创建的COM部件类型。例如,如果要创建的是 COM Automation 部件,则可以在

    <public> 元素中声明属性、方法和事件,然后用一个或多个 <script> 元素编写脚本来定义这些内容。<object>元素:包含脚本中所使用的某个对象的信息,如另一个 COM 部件的信息。<resource>元素:包含不应被硬编码到脚本部件代码中的值。资源元素可能包括在各个版本间可能更改的信息,可能需要翻译的字符串以及其他值。<reference>元素:引用在脚本中需要使用的类型库。<comment>元素:包含在分析和执行该脚本部件时将被忽略的文字,说明或者注释。

    了解了这些知识,让我们来看一个最最简单的例子:

    <?XML version="1.0"?>       <package>         <component id="test">           <registration             progid="ID"             description="description"             version="1"             clsid="{A66E243C-CF13-42AC-BE67-558F2FA82B39}"/>

               <public>             <property name="du"/>               <get/>             <method name="xie"/>           </public>

               <script language="VBScript">             <![CDATA[               dim du               function get_du()          du=get_du               End function

                   Function xie()                 msgbox du               End Function             ]]>           </script>         </component>       </package>

    用代码调用Set test=CreateObject("ID")test.du=5test.xie显示正常


    最新回复(0)