热度 1||
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
|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )
GMT+8, 2024-11-25 04:43 , Processed in 0.113293 second(s), 18 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.