注册 登录
Office中国论坛/Access中国论坛 返回首页

zhuyiwen的个人空间 http://www.office-cn.net/?625 [收藏] [复制] [分享] [RSS]

日志

Windows 脚本组件技术(转)

热度 1已有 2614 次阅读2016-5-4 09:36 |个人分类:VBA| 脚本, 组件

Windows 脚本组件技术为开发者提供了用脚本语言创建功能强大、可复用的 COM 组件的简便方式。开发者可以使用任何支持 Microsoft ActiveX Scripting 接口的脚本语言来创建脚本组件,支持这些接口的脚本语言有 JScript、VBScript 和 PERLScript 等。使用脚本组件可以为多种任务创建 COM 组件,如访问和操作数据库数据、给应用程序添加事务处理以及使用 DHTML Behavior 给 Web 页添加交互效果等。

1、脚本组件技术

1.1 脚本组件的运行
    脚本组件的运行涉及三个方面内容:脚本组件运行时程序(Scrobj.dll),接口处理程序和脚本组件文件(扩展名为.wsc)。
   
    (1) 脚本组件运行时程序(Scrobj.dll)用来帮助将 COM 请求发送到脚本组件。Scrobj.dll是主机应用程序的入口点并作为脚本组件的 inproc 服务器执行。
    (2) 接口处理程序是已经编译好的实现特定 COM 接口的组件。复杂的 COM 组件可以包括多个接口的实现。最常使用的接口处理程序包括 COM Automation 接口处理程序、ASP 接口处理程序以及用于 DHTML Behavior 的处理程序。这些处理程序都已内置于脚本组件运行时程序中,其它处理程序可作为外接组件或嵌在相关的应用程序中。
    其中,Automation 组件是最常用的 COM 组件类型,该组件拥有属性和方法,其它应用程序可以调用这些属性和方法。实现这些功能所必需的低层次 COM 接口都内置于 Automation 接口处理程序中。在脚本组件文件中只需定义需要说明的属性、方法和事件,便可确保主应用程序对 Automation 处理程序的正确调用。
    (3) 脚本组件文件属于可扩展的标记语言(eXtensible Marked Language,简称 XML)文件。用户可遵循 XML 规则来开发只包含简单函数功能的 COM,也可开发包括外接组件的复杂 COM。
   
1.2 脚本组件文件的框架
    Windows 脚本组件文件采用 XML 来编写。XML 元素定义了脚本及其操作。
    下面的示例演示了一个脚本组件文件的框架。
[code]<?XML version="1.0"?>
<package>
 <?component error="true" debug="true"?>
 <component id="MyComponent">
  <registration>
  </registration>
  <reference object="progID" />
  <public>
  </public>
  <implements type=COMhandlerName id=internalName>
  </implements>
  <script language="VBScript">
  </script>
 </component>
</package>[/code]
    其中几个主要脚本元素意义如下:
    (1) <component> 元素包含的是一个完整的脚本组件定义。在同一个 .wsc 文件中可出现多个 <component> 元素,但这些 <component> 元素应包含在一个 <package> 元素内。
    (2) <registration> 元素包括用来将脚本组件注册为 COM 组件的信息。如果宿主应用程序(如IE)在创建该脚本组件的实例时没有直接用到 Windows 注册表,则该元素可省略。
    (3) <script> 元素包含用来实现脚本组件逻辑的脚本,这取决于所创建的 COM 组件类型。如果开发者创建的是 COM Automation 组件,则可以在 <public> 元素中声明属性、方法和事件,然后用一个或多个 <script> 元素编写脚本来定义这些内容。
    (4) <reference> 元素引用在脚本中需要使用的类型库。
   
1.3 脚本组件的使用
    在 Windows 资源管理器中,用鼠标右键单击脚本组件(.wsc)文件,然后选择“注册”,或者使用 regsvr32.exe 注册程序进行注册:
    [code]regsvr32 path\component_name.wsc[/code]
    在创建和注册 Windows 脚本组件后,就可以像使用任何 COM 组件一样,通过宿主应用程序调用来使用该脚本组件。宿主应用程序可以是 VB、C++、IE 等应用程序。
    根据宿主应用程序和脚本组件类型,以及部署该脚本组件的位置,在创建脚本组件的实例时会有各种选项。其中最主要的差别是在本地还是远程创建脚本组件的实例。如:
[code]Set local = CreateObject("ConDB.wsc") ' 实例化本地组件
Set remote= CreateObject("ConDB.wsc", "my_server") ' 实例化远程组件[/code]
   
2、脚本组件应用实例

    编写脚本组件不像使用 VC、VB 等高级语言编写 COM 组件那样需要复杂的集成开发环境。开发者只需要使用简单的文本编辑器就可以进行脚本组件的开发。
    下面结合一个脚本组件实例(ConDB.wsc)简要阐述应用脚本组件进行系统业务开发的过程。这个脚本组件将连接数据库服务器,并打数据库连接。
   
2.1 脚本组件文件 ConDB.wsc
[code]<?xml version="1.0"?>
<component>
 <?component error="true" debug="true"?>
 <registration
  desciption="ConDB"
  progid="ConDB.wsc"
  version="1.00"
  classid="{9247c2de-a42d-4755-aa60-8b14c1af6b4f}">
 </registration>
 <reference object="ADODB.Connection.2.8" />
 <public>
  <method name="ConToDB">
   <PARAMETER name="servername" />
   <PARAMETER name="dbname" />
   <PARAMETER name="user" />
   <PARAMETER name="password" />
  </method>
 </public>
 <implements type="ASP" id="ASP" />
 <script language="VBScript">
 <![CDATA[
 Function ConToDB(servername, dbname, user, password)
  On Error Resume Next
  Set con = CreateObject("adodb.connection")
  con.ConnectionTimeout = 25
  con.ConnectionString = "Provider=SQLOLEDB.1" & _
   ";Persist Security Info=False;User ID=" & user & _
   ";pwd=" & password & _
   ";Initial Catalog=" & dbname & _
   ";Data Source=" & servername
  con.Open
  If con.State = 1 Then
   ConToDB = "connection success!"
  End if
  If Err.Number <> 0 Then
   ConToDB = Err.Description
  End If
 End Function
 ]]>
 </script>
</component>[/code]

2.2 应用脚本组件 ConDB.wsc
    创建和注册脚本组件以后,开发者就可以在 VC、VB、IE 等宿主程序中使用组件,如下是在 IE 中使用组件 ConDB.wsc 的一个例子。
[code]<%@language=vbscript%>
<html>
<body>
<%Set db = CreateObject("ConDB.wsc.1.00")
desc = db.ConToDB("(local)", "pubs", "sa", "sapwd")
response.write desc %>
</body>
</html>[/code]
    开发者除了可以像以上直接实例化组件对象使用脚本组件外,还可以为脚本组件生成一个类型库,该类型库包括组件的接口和成员的信息。在有些宿主应用程序(如VB)中,如果要给脚本组件编写事件能力,则类型库是必需的。使用类型库可以将事件绑定到脚本组件上,并且在VB中可见。此外,在编写脚本组件的相关VB代码时,对象浏览器中将出现类型库信息,从而使开发者能够很方便地查看和使用脚本组件的方法、事件等成员、
    开发者可以像以下这样为一个脚本组件生成类型库。在 Windows 资源中,用鼠标右键单击脚本组件文件,然后选择“生成类型库”。这将为脚本组件生成一个与脚本组件文件名同名的 .tlb 文件,并在 Windows 注册表中注册。该文件将与脚本组件文件处于同一文件夹。
    如果要更精确控制类型库的生成,开发者可以在脚本组件文件中动态地生成类型库,或者也可以使用命令行接口,如下为脚本组件(ConDB.wsc)创建一个类型库。
[code]rundll32.exe c:\Windows\System32\scrobj.dll,GenerateTypeLib -name:ConDBLib -file:e:\component\ConDB.tlb -doc:\"ConDB component typelib\" -guid:{9247c2de-a42d-4755-aa60-8b14c1af6b4f} -major:1 -minor:0-URL:e:\components\ConDB.wsc[/code]

参见:
http://www.xav.com/perl/Windows/windows_script_components.html

发表评论 评论 (1 个评论)

回复 ganlinlao 2016-5-4 13:27
   脚本语言,现在微软首推powershell。可以使用ActivePowershell,这是一个com,可以把PowerShell当vbscript那样使用。支持c#的winform界面,可以写classic ASP,只不过脚本语言由vbscript变成PowerShell。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-19 14:10 , Processed in 0.055777 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部