◎简单WSC组件的基本结构

来源:互联网 发布:阿里云oss文件上传 编辑:程序博客网 时间:2024/05/20 06:04
 

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

1、注册部分:
主要包含了向注册表注册部件时需要填写的信息。一般包含了部件描述、版本信息、progid、clsid等四个内容。基本格式如下:
<registration
description="部件描述的信息"
version="部件的版本号"
progid="XXXX.XXX"        /程序ID
clsid="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 objSLTL
Set objSLTL = CreateObject( "Scriptlet.TypeLib" )
Wscript.echo objSLTL.GUID
Set 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=5
test.xie
显示正常

原创粉丝点击