Delphi中的集成VBS脚本语言应用
?
罗焱 ?从薇?? 王正浩
上海华东师范大学信息学院
摘要:使用ActiveX Scripting技术,可以在应用程序中集成使用脚本语言。本文介绍如何应用这一技术在Delphi应用程序中添加VBScript支持。
关键词:ActiveX脚本描述;Delphi;VBScript
?
1.引言
Delphi语言是Borland公司开发的一种功能强大的编程语言,它基于串口和面向对象,并兼有VC的强大功能和VB的快速开发、易学易用的优点,具有开发效率高、界面制作美观方便、可实现各种操作功能等特点。VBS全称Visual Basic Script,是一种简单易学,功能强大的脚本语言,应用极为广泛。
本文介绍了通过ActiveX Scripting技术在Delphi中调用和操作VBS的方法,实现了Delphi和VBS的混合编程,充分发挥了两者各自的优势。
?
2.基本原理
2.1 ActiveX技术的基本概念
在Delphi中无法直接调用VBS,而利用ActiveX技术可以解决这个问题。ActiveX是Microsoft公司于1996年提出的一项技术,它以COM(Component Object Model,组件对象模型)为基础,使得不同的进程(特别是网络进程)之间可以相互通信。ActiveX控件是Microsoft公司提供的一种用于模块集成的协议,是可移植的软件模块,适用于各种开发语言,因而与开发平台无关。ActiveX控件由一些遵循ActiveX规范的可执行代码组成,比如一个.exe,.dll或.ocx文件。在程序中加入ActiveX控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。ActiveX控件保留了一些普通Delphi控件的属性、事件和方法,其特有的方法和属性大大地增强了程序设计者的能力和灵活性。
2.2 ActiveX脚本描述(ActiveX Scripting)
使用ActiveX技术中的ActiveX脚本描述(ActiveX Scripting)技术,可以从客户端或者服务器端操纵ActiveX控制和Java程序,传递数据,协调它们之间的操作。
ActiveX Scripting体系由一个COM接口族组成,这些接口定义了一个把脚本引擎和宿主程序连接起来的协议。在ActiveX Scripting的世界里,脚本引擎只是一个组件对象,它能够动态地执行脚本程序。宿主应用程序可以将它的Automation接口暴露在脚本引擎的名字空间中,可在动态执行的脚本中像访问程序中的变量那样访问应用程序的对象。
??? 应用程序根据要解析的Script语言来创建和初始化脚本引擎,然后把应用程序连接在引擎上。然后把脚本代码提交给脚本引擎,脚本代码就可以执行了。
ActiveX Scripting利用WSH,即Windows Scripting Host来做为脚本语言的工作环境。WSH是在系统内植入的一个基于32位Windows平台、并独立于语言的脚本运行环境,WSH架构于ActiveX之上,通过充当ActiveX的脚本引擎控制器为Windows用户充分利用威力强大的脚本指令语言扫清了障碍。
?
3.调用VBS在Delphi中的实现
要在Delphi中调用VBS首先需要在DELPHI集成环境中安装ActiveX控件。
要导入Activex控件,先选中Delphi菜单中的Component,选择导入ActiveX控制,安装Microsoft Script Control,就在Delphi环境中安装了ActiveX控件,然后在程序代码中加上这样一句:use MSScriptControl_TLB就可以调用VBS代码了。
代码其余部分参见下列代码示范:
l_ScriptControl:=TScriptControl.Create(nil); //创建Script控制对象
? l_ScriptControl.AllowUI:=True;
? l_ScriptControl.Language:='VBScript'; //确定Script语言
? v := VarArrayCreate([0, 0], varVariant);
? v[0] := InputVarArrays;
? Params: = PSafeArray(TVarData(v).VArray);
? l_scriptCode:=Tstringlist.Create;
? try
l_scriptCode.LoadFromFile(VBScript_filename+'.vbs'); //导入VBS文件程序
if l_scriptCode.Count=0 then exit;
l_ScriptControl.AddCode(l_scriptCode.Text);
result:=l_ScriptControl.Run(VBScript_filename, Params); //运行VBS程序
? finally
????? l_ScriptControl.Free; //最后释放所有的VBS对象
??? l_scriptCode.Free;
? end;
这样就可以成功的调用一个VBS程序进行所需的操作了。但这只是做了最基本的操作,离实际的需求还有一段距离。比如说如果希望为了提高代码重用性和效率,可以使用事先写好的一些公用VBS函数,如一些基本数学函数。但是上面的例子只能调用一个VBS文件,文件名即函数名,有极大的局限性。
为了解决上面的问题,有相应的解决办法。如下面的程序所示:
?? ……//循环检查要装入的VBS文件是否存在
? l_scriptCode:=Tstringlist.Create;
? l_ScriptControl:=TScriptControl.Create(nil);
? try
??? l_ScriptControl.AllowUI:=True;
??? l_ScriptControl.Language:=L_VBScript;
??? v := VarArrayCreate([0,0], varVariant);
??? v[0] := InputVarArrays;
??? Params: = PSafeArray (TVarData(v).VArray);
//循环装入需要的VBS文件,并检查文件代码是否为空
??? for l_i := 0 to VBScript_filenames.Count-1 do
??? begin
????? l_scriptCode.LoadFromFile(VBScript_filenames.Strings[l_i] +’.vbs’);
???? ?if l_scriptCode.Count=0 then? exit;
????? l_ScriptControl.AddCode(l_scriptCode.Text);
??? end;
?? //正常调用VBS程序
OutputDataSets :=l_ScriptControl.Run(VBScript_filenames.Strings[0],Params);
? finally
??? l_ScriptControl.Free;
??? l_scriptCode.Free;
? end;
来比较一下两段程序的不同,首先是第二个程序可以载入多个文件,其中第一个文件与要执行的主函数同名,其余的文件包含了该主函数可能会调用的一些基本函数,为此还增加了检查函数文件及其代码的工作。
这样就可以很轻松的使用事先写好的一些程序,象搭积木一样,让用户不必学习深奥的编程知识,有熟练的编程技巧,就可以轻松使用VBS进行自己想要的操作。同时遇到以后功能扩展的需要,也可以编写符合要求的VBS函数进行我们需要的操作了。
4.总结
随着计算机和信息技术的不断发展,计算机的软件应用变得越来越普遍,但是要设计适应要求的通用型软件还是有很大的难度。本文介绍了利用Active Scripting技术在Delphi中集成使用VBS的方法,目的就是为了利用脚本语言为应用程序提供二次编程的能力,从而大大的提高软件的适用性。Delphi和VBScript都是非常强大的开发工具,如果能够很好地把它们结合起来,相信能够开发出越来越多功能强大、适用性强的商业软件。
?
参考文献:
[1] 吕思伟,潘爱民.ActiveX Scriptng技术(一)一(三).微电脑世界 1999-01~03
[2]? Steve Teixeora,Xavier Pacheco著 任旭钧,王永生,冯译波等译 Delphi5开发人员指南 机械工业出版社 2000年7月第一版
[3] .Introduction to ActiveX Controls,Microsoft Corp.,MSDN,1998年8月
[4]. http://www.microsoft.com/,Microsoft公司,包括MSDN、MSJ等技术资源
?
?