您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基础教程ActiveXScripting概要
基础教程ActiveXScripting概要-vc相关链接:进入论坛打口水战写程序员自己的博客在线测试一下自己的水平目前,ActiveXScripting还不能像我们谈论过的VBScript和JavaScript语言那样,成为一种语言(宏或其它形式的语言,本章下一节将讨论JavaScript语言)。最好将它定义为客户机与服务器之间的一种通信方法。实质上,它是Microsoft为OLE自动化起的新名称。说OLE自动化与ActiveXScripting完全相同也许不够准确,因为Microsoft没有把ActiveXScripting的能力停留在应用级别上。(大多数Microsoft产品和诸如CorelDRAW之类的一些其它产品,在应用级别上支持OLE自动化!)ActiveXScripting还包括了Internet。可移植性问题本书前面的例子中,MFCAppWizard(应用程序向导)提供了OLE自动化复选框,这一点也许你已注意到。这一复选框,像诸如CorelDRAW之类的产品一样,向你的应用程序添加相同种类的脚本能力。换言之,可以在本地的机器或网络中使用脚本能力。但是,这一能力仍然不是完整的ActiveXScripting,因为它不包括Internet。你仍然需要手工地向VisualC应用程序添加这种功能。因为ActiveXScripting标准还没有最后定下来,所以你看到的仍然是进展中的东西。既然ActiveXScripting不是语言,而是通信规范,那么,脚本语言,包括语法,这一类问题就留给了脚本供货商来提供。这一标准的目的在于定义一种方法,使脚本主机可以调用各种脚本引擎,并且用于OLE容器中对象间的通信。从实质上看,脚本更像是可执行代码的大杂烩,它可能含有文本、伪代码,甚至还有原始二进制格式的可执行代码。ActiveXScripting的实质是,它是基于OLE的、可用于应用程序和Internet的通信媒介。WEB链接写作本书时,ActiveXScripting说明书仍在变动之中。如果打算用ActiveXScripting作为其它技术的替代或补充,也许要用些时间看一下最新动向。进而,本节并不完全涵盖OLE主机和脚本引擎需要的所有接口方法的调用语法。欲了解目前ActiveXScripting说明更多的信息,请查看要查找有关ActiveXScripting主机的信息,下列两个站点不错:和。如果想多了解一些关于建立一个ActiveXScripting引擎的需求,请查看:。让我们花点时间定义几个术语。首先,精确地说,什么是脚本主机呢?它是支持脚本引擎的一种应用程序。定义脚本时,是脚本主机接受这个脚本并向引擎发出命令。ActiveXScripting主机的最通用的例子是InternetExplorer3.0。使用插件可以向NetscapeNavigator添加这种能力。第8章讨论过一种插件棗NCompassScriptActive。脚本引擎,当然不限于这些产品中的任何一种。你可以在一个定制的浏览器应用程序中建立它,或者在一些应用程序中找到它。例如,很有可能,在不远的将来,Microsoft会使其全部应用程序产品(如MicrosoftWord)都符合这一标准。一个ActiveX脚本引擎是一个对象,这个对象才真正地对脚本进行解释。对精确的语言语法甚至脚本的形式都没有限制。理论上,写ActiveX脚本,可使用任意语言,包括VBScript、Java和JavaScript。和本节后面要讨论的任何一种OLE对象一样,一个ActiveX脚本引擎提供的是特殊接口。另外,可以使用OLE自动化包装工具写出ActiveX脚本引擎(Microsoft计划为ActiveXScripting提供一种特殊形式的OLE自动化包装器)。使用包装器格式的好处是,它保持了代码的短小精炼──这对于浏览器和在线脚本引擎都是理想选择。不利之处是,如果直接写出ActiveXScripting接口,你将失去对运行时你可以有的名字空间、持久模型以及其它著作元素的控制。ActiveXScripting要求有四种新的接口元素。可选项IActiveScriptSite和可选项IActiveScriptSiteWindows接口为主机专用,而IActiveScript和可选项IActiveScriptParse接口则为脚本引擎专用(若不实现IActiveScriptParse,则需要实现某种形式的IPersist接口)。每个接口元素执行下面列出的一种具体功能:IactiveScriptSite这个接口的主要目的是为ActiveXScripting引擎创建一个站点。这与其它的OLE实现中的容器的概念(idea)相对应──容器容纳的是诸如ActiveX控件之类的东西。因为这是一个容器接口,所以它监测脚本的开始、终止及脚本出错等等一类的事件。IactiveScriptSiteWindow任一个提供用户接口的ActiveXScripting主机,也需要提供本接口(服务器不一定应用它)。实际上,如果需要用于脚本目的的窗口,则也需要实现这一接口。IActiveScriptSiteWindow提供了两种主要方法(尽管可以提供其它所需的方法):GetWindow()用于创建窗口,EnableModeless()则设置窗口的模式(modal)条件。GetWindow()的功能类似于OLE自动化专用的IOleWindow::GetWindow()函数,而EnableModeless()的功能则类似于IOleInPlaceFrame::EnableModeless()函数。IactiveScript这一接口使你与脚本本身一起工作,用它可得到脚本的站点、启动和终止脚本、使用脚本项目、关闭脚本、或者建立线程状态与参数。IactiveScriptParse这一接口从脚本主机接受脚本,它使你能创建一个新脚本、向一个现存脚本中添加原始脚本片段或对一个现存脚本进行分析。VisualC提供了一个方便的实用程序,称为OLE/COMObjectViewer(OLE/COM对象浏览器),使用它可以更详细地看到这些接口(Microsoft在其VisualC的最新版本中将名称缩写为OLEView(OLE浏览器))。本书中我们将多次用到这个实用程序,如果你还没有安装的话,应该安装上它。让我们先看一看ActiveXScriptingissue的主机端。和以前提到的一样,VisualC仍然提供一个OLE自动化接口,这个接口不提供与Internet连接的功能。接着请打开OLE/COMObjectViewer,就会看到一叠文件夹。打开DocumentObjects(文档对象)文件夹,再打开XYZSingleDocument文件夹,就会看到接口列表,与图9.1类似,这些接口是MFC实现的,建立应用程序时可使用它们。请注意在左边的窗格中的IOleWindow接口已被选中。看一下右边的窗格,可以看到这个接口提供五种方法。进一步研究表明,这些方法之一是GetWindow()。前面提到过,没有IActiveScriptSiteWindow接口,而IOleWindow接口却存在,这意味着你的应用程序支持OLE自动化,而不支持ActiveXScripting。现在,如果你看一下这个列表中的每个其它应用程序,(如果有的话)包括Office97,就会发现,没有一个应用程序是支持ActiveXScripting的。警告如果在OLE/COMObjectViewer中创建了应用程序或控件的实例,而后没有不释放相应实例,那么就会发生奇怪的事情。例如,你的机器会意外地死机!每当你查看一个应用程序或控件支持的接口时,就不得不创建一个实例来完成这个操作。通过查看应用程序的名称,也能够知道是否存在一个对象的实例。OLE/COMObjectViewer用粗体显示打开的对象。为了释放你创建的实例,用右键单击对象名(比如是XYZSingleDocument),然后在上下文相关菜单中选择ReleaseInstance(释放实例)即可完成。幸运的是,OLE/COMObjectViewer在你离开该工具时总是会关闭对象的实例,但是如果在查看会话期间机器的内存开始不够用时,就应该关闭对象的实例。应该记住,每创建一个实例,就要占用一些内存。客户端对ActiveXScripting也是支持的,至少在一种初步形式上是这样。释放XYZSingleDocument的实例,然后关闭DocumentObject文件夹。接着打开ActiveXScriptingEngine文件夹,可以看到两个项,一个是JavaScript,另一个是VBScript。这两个项都是InternetExplorer支持的,但我们期望看到NetscapeNavigator也支持它们。打开JScriptLanguage(JavaScript)项,可以看到如图9.2所示的典型的接口列表(你的列表也许会稍有不同)。图9.2在OLE视图中查看JavaScrip请留意被选中的项IActiveScript,它是我前面描述过的第一个客户机端接口,在它下面,可以看到IactiveScript-Parse项,它是我前面描述的第二个客户机端接口。这两个元素的存在,意味着InternetExplorer当前把ActiveXScripting做为一个客户机来支持它。但是,在OLE/COMObjectViewer的这一部分中却连一个相联系的服务器项都找不到。让我们对于ActiveXScripting的主机与客户机的关系再多说几句。一个ActiveXScripting会话期,要涉及到三个不同的元素:主机、引擎以及包含代码和控件的窗口(页)。在这三个元素之间建立通信的过程有8个步骤:1.主机根据需要装入文档或工程。这不是ActiveXScripting专用任务,因为任意环境都需要执行这一步。2.主机创建一个脚本引擎。通常,它要使用OBJECT标记中的PROGID属性,并通过调用CoCreatInstance()来完成这个任务。3.然后装入脚本。主机完成这件事的方式有几种。如果脚本存贮为驻留(Persisted)数据,那么,主机就使用引擎的IPersist::Load()把它再次装入内存。如果主机需要装入一个新脚本,那么它就调用IActiveScriptParse::InitNew()或者IPersist::InitNew()创建一个空脚本。把脚本当成文本来维护的主机,然后调用IActiveScriptParse::ParseScriptText()把脚本装入引擎(使用其它格式维护脚本的主机则不得不设计自己的装入方法)。4.主机把脚本装入后,必须用实体填入引擎的名字空间。实体可以是窗体、页或其它文档。主机使用IActiveScript::AddNameItem()方法完成这一任务。显然,它不必装入存贮为脚本驻留内存一部分的那些实体。低级项(比如ActiveX控件)需要不同的装入技术,主机使用ITypeInfo和IDispatch接口来完成这项工作。5.现在,ActiveX脚本引擎已取得了它需要运行脚本所需的一切。主机发出一个IActiveScript::SetScriptState(SCRIPTSTATE_CONNECTED)调用,这就是让脚本引擎启动脚本。它相当于标准C程序中调用Main()函数。6.在脚本引擎真正开始运行脚本之前,
本文标题:基础教程ActiveXScripting概要
链接地址:https://www.777doc.com/doc-2578756 .html