本文结合目前Internet(WEB)
技术发展动向,简略介绍了Microsoft提出的ActiveX
技术的内容,阐述了ActiveX
技术与WEB站点建设和桌面程序开发的关系,以及利用Visual C++和Visual Basic 开发ActiveX部件的步骤和方法,并给出了在WEB网页中使用ActiveX部件的例子。
1. ActiveX概要
1.1. ActiveX的定义
ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使 得软件部件在 网络环境中进行交互的 技术集。它与具体的 编程语言无关。作为针对Internet应用开发的 技术,ActiveX被广泛应用于WEB 服务器以及客户端的各个方面。同时,ActiveX 技术也被 用于方便地创建普通的桌面应用程序。
1.2. ActiveX的内容
ActiveX既包含 服务器端 技术,也包含客户端 技术。其主要内容是:
* ActiveX控制(ActiveX Control);用于向WEB页面、Microsoft Word等支持ActiveX 的容器(Container)中插入COM对象。
* ActiveX文档(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器 中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户自 定义的文档等。
* ActiveX脚本描述(ActiveX Scripting);用于从客户端或者 服务器端操纵ActiveX控 制和Java程序,传递 数据,协调它们之间的操作。
* ActiveX 服务器框架(ActiveX Server Framework);提供了一系列针对WEB 服务器应 用程序设计各个方面的函数及其封装类,诸如 服务器过滤器、HTML 数据流控制等。
* 在Internet Explorer中内置Java虚拟机(Java Virtual Machine),从而使Java Applet 能够在Internet Explorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。
1.3. ActiveX与Java的比较
ActiveX提供了一种扩展包括Java在内的任何 编程语言的机制,Java的开发人员可以在Applet 中使用ActiveX 技术,直接嵌入ActiveX控制,或者以ActiveX 技术为桥梁,将其它开发商提 供的多种语言的程序对象集成到Java中。与Java的字节码 技术相比,ActiveX提供了“代码签名” (Code Signing) 技术保证其安全性。
1.4. Internet Explorer和Netscape Navigator
不言而喻,Microsoft的Internet Explorer全面支持ActiveX。同时,Microsoft提供了 Netscape Navigator的插件(Plug-In),从而使Navigator也可以浏览包含有ActiveX部件的WEB 站点。
2. ActiveX控制和Internet
ActiveX控制是OLE控制的更新版本。控制(Control)是建立可 编程部件(Component) 的主要元素。ActiveX控制可以用于所有支持COM规范的容器中,或者作为Internet控制嵌入到WEB 页面中。用户访问该页面时将下载该控制并 自动在本地注册。利用脚本描述语言(Script)可 以在控制之间以及客户与 服务器之间通过设置属性(Property)、调用方法(Method)和激活事 件(Event)进行通信。
ActiveX控制与以前的OLE控制相比,具有更少的接口,并且可以没有窗口。所有的ActiveX 控制都支持IUnknown接口。
目前,很多第三方开发商编制了各式各样的ActiveX控制。在Internet上,有超过1000个 ActiveX控制供用户下载使用。在WINDOWS的SYSTEM目录下,保存有很多Window提供的ActiveX控 制。Microsoft Visual C++(以下简称VC)提供的MFC(Microsoft Foundation Classes)控制 都是ActiveX控制。
考虑到当前Internet相对较低的传输速率,设计运行于Internet的ActiveX控制时,必须 考虑以下几个问题:
* 控制尽可能小;
* 持续存储 数据(Persist Data)如何保存;
* 如何在Internet上下载和安装;
* 控制如何在客户端注册;
3. ActiveX文档和Internet
ActiveX文档提供了传统的嵌入对象的扩展方法。ActiveX文档对象可以包含多个页,显 示在整个客户区中,并支持原有的菜单功能。与以往的嵌入对象不同的是,ActiveX文档对象不再 以一个阴影方框包围来显示,而是全框架(Full Frame),并总处于激活状态。
Microsoft Office97提供了Microsoft Office Binder,用来生成并浏览由Microsoft Word 、Microsoft Excel或者用户定义的ActiveX文档等构成的复合文档,每一种文档类型都可以 直接进行编辑修改。
ActiveX文档可以作为对象嵌入到WEB网页中,在WEB上发布。
4. ActiveX脚本描述语言
利用VBScript或者Microsoft JScript,可以向Web页面中加入可用于交互的ActiveX控制, 将 数据预处理或者检验过程放在客户端进行,然后将结果传往WEB 服务器。
5. ActiveX 服务器框架
在WEB 服务器上创建扩展应用程序,动态生成WEB页面。使用MFC提供的ISAPI类可以方便 地建立WEB 服务器端的扩展应用程序。
6. Visual C++ 5.0对ActiveX的支持
VC++ 5.0(企业版)为Internet开发提供了完整的解决发案,其内容是:
* 使用MFC或者ATL开发ActiveX控制和ActiveX文档。
* 使用ISAPI设计WEB 服务器端的部件。
* 使用WinInet 开发通过Internet存取文件的应用程序。
* 使用Asynchronous Monikers生成从Internet下载 数据的应用程序。
* 使用ActiveX SDK开发其它类型的基于Internet的Win32应用程序,包括ActiveX Scripting Host,Microsoft WebConferencing等。
6.1. 用VC5.0开发ActiveX控制
VC++5.0提供两个途径开发ActiveX控制:MFC和ATL(Active Template Library)。使用 MFC,可以不必理会控制接口的细节,把注意力集中在控制本身的功用上,但是生成的控制比较 大。而且,客户端如果要运行此ActiveX控制,必须拥有相应版本的MFC类库的DLL,否则,必须 同时下载这些巨大的类库;使用ATL,由于不涉及MFC的标准类库,生成的控制相对较小,但开 发者必须了解COM、OLE 技术的细节。大多数情况下,可以使用MFC开发ActiveX控制,这样比较容 易。
而且,由于Internet Explorer 3.0提供了MFC 4.1的类库,而Internet Explorer 3.0是Windows95 提供的组件,所以,只要ActiveX控制使用的是MFC 4.1或者更早的版本,多数情况下不需 要下载MFC的类库。
使用MFC开发ActiveX控制,可以用MFC ActiveX Control Wizard生成工程框架。VC会自 动产生三个类:(假设MyName是控制的名字。)
* CMyNameApp:从类COleControlModule派生,而类COleControlModule则派生自CWinApp;
* CMyNameCtrl:从类COleControl派生,而类COleControl则派生自CWnd;
* CMyNamePropPage:从类COlePropertyPage派生,而类COlePropPage则派生自CDialog;
可以看出,这个框架与一般的MFC应用程序有些类似。开发人员的大部分工作在CMyNameCtrl 中,例如用Class Wizard添加属性、方法和事件,处理显示等。
编译生成OCX文件后,用VC提供的ActiveX Test Container测试这个控制,也可以用 OLE/COM Object Viewer浏览此控制的接口信息及类型库。
6.2. ActiveX控制在WEB上的应用
考虑到WEB的安全性,为了在 服务器与客户端建立良好的信任关系,必须为每个在WEB上 使用ActiveX控制设置一个“代码签名”(Code Signing)。VC5.0提供了生成供测试用的“代码 签名”的工具。如果要正式发布,则必须向有关机构申请。(参见http://www.microsoft.com/intdev/signcode/)
在WEB页面中使用ActiveX控制,还要对之进行包装,将有关的动态连接库及信息文件压 缩到一个扩展名为CAB(Cabinet)文件中。可以使用VC5.0提供的工具包装ActiveX控制。在HTML 文件中,使用OBJECT标签插入ActiveX控制,并利用VBScript或者JScript访问该ActiveX控制。客 户端用Internet Explorer浏览此页面时,可以 自动解包该文件。出于安全性的考虑,Internet Explorer为ActiveX 部件的下载、初始化、是否拥有合法的代码签名以及是否允许Scripting 等设置了不同的安全级别,用户可根据需要进行设置。下面这个例子中,使用了ActiveX控制 "MSChart.OCX",当用鼠标单击此控制时,控制的标题将改变。
〈OBJECT
CLASSID="clsid:31291E80-728C-11CF-93D5-0020AF99504A"
CODEBASE="MSCHART.CAB#version=1,0,0,0"
ID=chart1
WIDTH=400
HEIGHT=200
ALIGN=center
〉
〈/OBJECT〉
〈SCRIPT language = "VBScript"〉
Sub chart1_Click()
Document.chart1.TitleText="My Title"
End Sub
这里,必须提供该OCX的ClassID和文件路径或URL。客户端浏览此页面时,先在本地的注 册表中查找该ClassID,如果存在,则不必下载。否则,必须按照CODEBASE指定的路径搜索该控 制并下载。标签Object中的ID是该OCX的对象的名称,用来访问和设置对象属性,调用对象方法 等。
6.3. 用VC5.0开发ActiveX文档 服务器
MFC4.2不支持开发ActiveX容器,但支持ActiveX 服务器。只要在使用MFC AppWizard时生 成应用程序框架时,选择支持Active Document,就可生成标准的ActiveX文档 服务器。运行此 应用程序时,该文档对象将 自动注册。要测试这个ActiveX文档,可以运行任何一个ActiveX文档 容器,如Microsoft Binder、Microsoft Word等,再插入此对象。
6.4. VC5.0的ActiveX 服务器框架
* ISAPI(Internet Server API)
ISAPI提供了扩展支持WEB 服务器的简单而有效的方法。开发人员可以设计生成ISAPI 服 务器扩展动态连接库(ISAPI Server Extension DLL),它可以被HTTP 服务器调用。例如,客户 端用户填写了一个表单,按下“提交”按钮后,输入的 数据将被传送至HTTP 服务器,激活相应的 ISAPI扩展应用程序,该应用程序可以处理用户的输入信息,进行相应的操作。或者,按照用户 的要求访问 数据库,读取用户指定的 数据,动态生成HTML文件,再传回客户端。
* ISAPI 过滤器(ISAPI Filters)
ISAPI过滤器是一种运行在支持ISAPI的HTTP 服务器上的动态连接库。它的作用是:监视 服务器与客户端的事件,当预先指定的某事件发生时,过滤器被调用,对要传递的 数据进行加密 或压缩,或者进行身份认证。换句话说,ISAPI过滤器提供了对 服务器和客户之间传递的 数据进行 预处理的功能。
* ISAPI和通用网关接口(CGI)的比较
ISAPI为WEB 服务器提供了通用网关接口应用程序的替代解决方案。与CGI不同的是,ISAPI 扩展应用程序和HTTP 服务器运行在同一个地址空间,不需要创建新的进程,因而不需要进行那 些进程之间耗费时间的通讯。ISAPI应用程序可以从HTTP服务器中卸载,为其它进程腾出内存空间。 CGI则必须为每一个任务建立独立的执行文件及URL映射,HTTP 服务器收到达每一个请求都将 启动一个新的进程。另外,CGI没有与ISAPI过滤器相对应的功能。
6.5. WinInet(Microsoft Win32 Internet Extensions)
VC5.0提供了开发客户端基于WEB的应用程序的API:WinInet,并将其封装成若干MFC类, 如CInternetSession、CHttpConnection等。使用这些类,开发人员不需了解TCP/IP以及Winsock 的细节,只要针对具体应用建立类对象就可以了。
6.6. Asynchronous Monikers
由于目前 网络带宽的限制,用户通常希望能够异步下载 数据,例如异步下载网页的一张 图片,并显示下载进度。MFC提供了类CAsyncMonikerFile来实现这个功能。
6.7. ActiveX SDK
VC5.0还提供了专门的WIN32 ActiveX开发工具:ActiveX Software Development Kit( ActiveX SDK)。ActiveX SDK包含一系列接口定义及与Internet有关的WIN32函数,包括 ActiveX Scripting Component、Web Browsing Object、WebPost API等,用户可以利用这些接口和API 开发面向WEB的应用程序或ActiveX部件。
6.8. Visual C++ 6.0
1998年9月,Microsoft将推出的Visual C++6.0。VC6.0除了保留VC5.0的ActiveX支持外 ,还将支持DHTML,MFC及ATL的类库及模板也有扩充。用户可以方便地开发出类似WEB浏览器界面 的应用程序。
7. Visual Basic 5.0对ActiveX的支持
7.1. Visual Basic 部件
Visual Basic 5.0(以下简称VB)的部件(Component)是由可执行代码构成的文件(EXE, DLL,OCX),它可以为其他应用程序或者部件使用。以前版本的V B允许用户生成称为"OLE Server" 的部件,VB5.0扩展了部件设计功能,支持引发事件,异步回调(Call-backs)等,并增 强了创建ActiveX控制和ActiveX文档的功能。
VB5.0的ActiveX部件(Component)包括:
* ActiveX控制
ActiveX控制与客户应用程序运行在同一个进程中。用VB5.0创建可用于VB或者其它开发 工具及WEB浏览器的ActiveX控制,与一般的VB应用程序设计大同小异。可以为ActiveX控制加上属 性页,并实时调试。另外,VB5.0提供了一组强大的 数据库存取控制,开发人员只需编写少量代 码就可以完成一般的 数据库操作。
* ActiveX文档
VB5.0的ActiveX文档提供了内置的窗口滚动、超链接以及菜单支持,直接嵌入WEB页中。 编制ActiveX文档与设计VB表单(FORM)完全相同,用户可以选择生成ActiveX Document DLL或 者ActiveX Document EXE。无论哪一种类型,VB都将生成一个类似表单文件的VBD(Visual Basic Document)文件。可以直接用Internet Explorer来浏览这个文件,或者用VBScript或者JScript 进行访问。
* ActiveX DLL
ActiveX DLL提供的对象与应用程序运行于同一个进程中。应用程序可以创建对象,设置 对象属性,调用对象的方法。ActiveX DLL一般不需要建立用户界面。
* ActiveX EXE
ActiveX EXE提供的对象与应用程序运行于在不同的进程中。应用程序创建对象,调用对 象的方法后,可以继续进行自己的工作。当对象的工作完成后,它会通知应用程序。
ActiveX DLL和ActiveX EXE合称为Visual Basic 代码部件(Code Component)。
7.2. 包装ActiveX部件
上述ActiveX部件都可以使用VB5.0的Setup Wizard进行包装,生成采用Lempel-Ziv压缩 算法的CAB文件,在WEB上发布。Setup Wizard将把相关的动态连接库及信息文件一同包装。使用 VB5.0生成的ActiveX 部件,可以包装成Safe Scripting和Safe Initializing。
7.3. ActiveX文档在WEB上的应用
向WEB页面中加入ActiveX文档,首先要将该ActiveX文档包装成CAB文件。由于Internet Explorer读入ActiveX文档时,该文档将取代当前的WEB页,因此,一般将ActiveX文档(即HTML 的标记OBJECT)放在一个独立的HTML文件中。例如,下面这条语句建立了一个超链接:
〈A hRef="ActiveXDoc.htm"〉Link to a ActiveX Document 〈/A〉
其中,ActiveXDoc.htm是下载ActiveX文档的HTML 文件:
〈OBJECT
classid="clsid:2F390484-1C7D-11D0-8908-00A0C90395F4"
codebase="ActiveXDoc.cab#version=1,0,0,0"〉
〈/OBJECT〉
这条语句将下载ActiveXDoc.cab,并在Windows注册表中注册该ActiveX文档。
7.4. Visual Basic 代码部件在WEB上的应用
Visual Basic 代码部件包括ActiveX DLL和ActiveX EXE,它们可以在 服务器端运行,也 可以从客户端下载再运行。
如果某个ActiveX DLL运行在 服务器端, 服务器上运行的是Internet Information Server,则可以使用VB的OLEISAPI2.DLL提供的函数进行访问,或者基于Active Server Pages使用 VBScript或者JScript。
如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB5.0 企业版生成了一个ActiveX DLL:MyDLL.DLL,它只有一个类:MyClass,其唯一的方法是显示LogIn 对话框。用Setup Wizard包装这个部件,生成了CAB文件。下面的语句将在客户端下载MYDLL.CAB:
〈OBJECT ID=MyClass
CLASSID="CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7"
CODEBASE="mydll.cab"〉
〈/OBJECT〉
〈INPUT TYPE=button VALUE="LogIn NOW" NAME="BtnLogin"〉
〈!--When the button is clicked,call the "LogIn" method. --〉
〈SCRIPT language = "VBScript"〉
〈!--
Sub Window_OnLoad
MyClass.Login
End Sub
Sub BtnLogin_OnClick()
MyClass.Login
End Sub
--〉
〈/Script〉
其中,Object ID是这个ActiveX DLL中某个类的名字。当此WEB页面被下载并显示时,MyClass 类的方法LogIn将被调用,并在客户端显示LogIn对话框。
7.3. Visual Basic 6.0
Microsoft计划于1998年9月推出Visual Basic 6.0。目前Beta版正在测试。VB 6.0与VB 5.0 相比,除继续支持Internet Explorer Document Object Model(DOM)开发之外,将提供两 个令人兴奋的新功能:
* Dynamic HTML编辑器
开发人员可以象编制普通VB程序一样,制作DHTML文件或模板。
* WebClasses;
开发人员可以在WEB 服务器端建立与ASP文件一一对应的WebClass类,每个类都可以访问 ASP对象,在Visual Basic IDE中跟踪调试,并生成ISAPI 动态连接库。
8. 小结
正如Internet和WEB 技术一样,ActiveX 技术的发展日新月异,新的更强大的开发工具使 得 服务器及客户端的应用开发、网站建设变得更简单,并容易扩展和重用。随着Microsoft的包括 Windows NT、Internet Information Server、Active Server Pages以及Microsoft FrontPage、 Internet Explorer等组件在内完整的Internet解决方案被广泛使用,ActiveX 技术将会有更 大的发展。
1. ActiveX概要
1.1. ActiveX的定义
ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使 得软件部件在 网络环境中进行交互的 技术集。它与具体的 编程语言无关。作为针对Internet应用开发的 技术,ActiveX被广泛应用于WEB 服务器以及客户端的各个方面。同时,ActiveX 技术也被 用于方便地创建普通的桌面应用程序。
1.2. ActiveX的内容
ActiveX既包含 服务器端 技术,也包含客户端 技术。其主要内容是:
* ActiveX控制(ActiveX Control);用于向WEB页面、Microsoft Word等支持ActiveX 的容器(Container)中插入COM对象。
* ActiveX文档(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器 中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户自 定义的文档等。
* ActiveX脚本描述(ActiveX Scripting);用于从客户端或者 服务器端操纵ActiveX控 制和Java程序,传递 数据,协调它们之间的操作。
* ActiveX 服务器框架(ActiveX Server Framework);提供了一系列针对WEB 服务器应 用程序设计各个方面的函数及其封装类,诸如 服务器过滤器、HTML 数据流控制等。
* 在Internet Explorer中内置Java虚拟机(Java Virtual Machine),从而使Java Applet 能够在Internet Explorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。
1.3. ActiveX与Java的比较
ActiveX提供了一种扩展包括Java在内的任何 编程语言的机制,Java的开发人员可以在Applet 中使用ActiveX 技术,直接嵌入ActiveX控制,或者以ActiveX 技术为桥梁,将其它开发商提 供的多种语言的程序对象集成到Java中。与Java的字节码 技术相比,ActiveX提供了“代码签名” (Code Signing) 技术保证其安全性。
1.4. Internet Explorer和Netscape Navigator
不言而喻,Microsoft的Internet Explorer全面支持ActiveX。同时,Microsoft提供了 Netscape Navigator的插件(Plug-In),从而使Navigator也可以浏览包含有ActiveX部件的WEB 站点。
2. ActiveX控制和Internet
ActiveX控制是OLE控制的更新版本。控制(Control)是建立可 编程部件(Component) 的主要元素。ActiveX控制可以用于所有支持COM规范的容器中,或者作为Internet控制嵌入到WEB 页面中。用户访问该页面时将下载该控制并 自动在本地注册。利用脚本描述语言(Script)可 以在控制之间以及客户与 服务器之间通过设置属性(Property)、调用方法(Method)和激活事 件(Event)进行通信。
ActiveX控制与以前的OLE控制相比,具有更少的接口,并且可以没有窗口。所有的ActiveX 控制都支持IUnknown接口。
目前,很多第三方开发商编制了各式各样的ActiveX控制。在Internet上,有超过1000个 ActiveX控制供用户下载使用。在WINDOWS的SYSTEM目录下,保存有很多Window提供的ActiveX控 制。Microsoft Visual C++(以下简称VC)提供的MFC(Microsoft Foundation Classes)控制 都是ActiveX控制。
考虑到当前Internet相对较低的传输速率,设计运行于Internet的ActiveX控制时,必须 考虑以下几个问题:
* 控制尽可能小;
* 持续存储 数据(Persist Data)如何保存;
* 如何在Internet上下载和安装;
* 控制如何在客户端注册;
3. ActiveX文档和Internet
ActiveX文档提供了传统的嵌入对象的扩展方法。ActiveX文档对象可以包含多个页,显 示在整个客户区中,并支持原有的菜单功能。与以往的嵌入对象不同的是,ActiveX文档对象不再 以一个阴影方框包围来显示,而是全框架(Full Frame),并总处于激活状态。
Microsoft Office97提供了Microsoft Office Binder,用来生成并浏览由Microsoft Word 、Microsoft Excel或者用户定义的ActiveX文档等构成的复合文档,每一种文档类型都可以 直接进行编辑修改。
ActiveX文档可以作为对象嵌入到WEB网页中,在WEB上发布。
4. ActiveX脚本描述语言
利用VBScript或者Microsoft JScript,可以向Web页面中加入可用于交互的ActiveX控制, 将 数据预处理或者检验过程放在客户端进行,然后将结果传往WEB 服务器。
5. ActiveX 服务器框架
在WEB 服务器上创建扩展应用程序,动态生成WEB页面。使用MFC提供的ISAPI类可以方便 地建立WEB 服务器端的扩展应用程序。
6. Visual C++ 5.0对ActiveX的支持
VC++ 5.0(企业版)为Internet开发提供了完整的解决发案,其内容是:
* 使用MFC或者ATL开发ActiveX控制和ActiveX文档。
* 使用ISAPI设计WEB 服务器端的部件。
* 使用WinInet 开发通过Internet存取文件的应用程序。
* 使用Asynchronous Monikers生成从Internet下载 数据的应用程序。
* 使用ActiveX SDK开发其它类型的基于Internet的Win32应用程序,包括ActiveX Scripting Host,Microsoft WebConferencing等。
6.1. 用VC5.0开发ActiveX控制
VC++5.0提供两个途径开发ActiveX控制:MFC和ATL(Active Template Library)。使用 MFC,可以不必理会控制接口的细节,把注意力集中在控制本身的功用上,但是生成的控制比较 大。而且,客户端如果要运行此ActiveX控制,必须拥有相应版本的MFC类库的DLL,否则,必须 同时下载这些巨大的类库;使用ATL,由于不涉及MFC的标准类库,生成的控制相对较小,但开 发者必须了解COM、OLE 技术的细节。大多数情况下,可以使用MFC开发ActiveX控制,这样比较容 易。
而且,由于Internet Explorer 3.0提供了MFC 4.1的类库,而Internet Explorer 3.0是Windows95 提供的组件,所以,只要ActiveX控制使用的是MFC 4.1或者更早的版本,多数情况下不需 要下载MFC的类库。
使用MFC开发ActiveX控制,可以用MFC ActiveX Control Wizard生成工程框架。VC会自 动产生三个类:(假设MyName是控制的名字。)
* CMyNameApp:从类COleControlModule派生,而类COleControlModule则派生自CWinApp;
* CMyNameCtrl:从类COleControl派生,而类COleControl则派生自CWnd;
* CMyNamePropPage:从类COlePropertyPage派生,而类COlePropPage则派生自CDialog;
可以看出,这个框架与一般的MFC应用程序有些类似。开发人员的大部分工作在CMyNameCtrl 中,例如用Class Wizard添加属性、方法和事件,处理显示等。
编译生成OCX文件后,用VC提供的ActiveX Test Container测试这个控制,也可以用 OLE/COM Object Viewer浏览此控制的接口信息及类型库。
6.2. ActiveX控制在WEB上的应用
考虑到WEB的安全性,为了在 服务器与客户端建立良好的信任关系,必须为每个在WEB上 使用ActiveX控制设置一个“代码签名”(Code Signing)。VC5.0提供了生成供测试用的“代码 签名”的工具。如果要正式发布,则必须向有关机构申请。(参见http://www.microsoft.com/intdev/signcode/)
在WEB页面中使用ActiveX控制,还要对之进行包装,将有关的动态连接库及信息文件压 缩到一个扩展名为CAB(Cabinet)文件中。可以使用VC5.0提供的工具包装ActiveX控制。在HTML 文件中,使用OBJECT标签插入ActiveX控制,并利用VBScript或者JScript访问该ActiveX控制。客 户端用Internet Explorer浏览此页面时,可以 自动解包该文件。出于安全性的考虑,Internet Explorer为ActiveX 部件的下载、初始化、是否拥有合法的代码签名以及是否允许Scripting 等设置了不同的安全级别,用户可根据需要进行设置。下面这个例子中,使用了ActiveX控制 "MSChart.OCX",当用鼠标单击此控制时,控制的标题将改变。
〈OBJECT
CLASSID="clsid:31291E80-728C-11CF-93D5-0020AF99504A"
CODEBASE="MSCHART.CAB#version=1,0,0,0"
ID=chart1
WIDTH=400
HEIGHT=200
ALIGN=center
〉
〈/OBJECT〉
〈SCRIPT language = "VBScript"〉
Sub chart1_Click()
Document.chart1.TitleText="My Title"
End Sub
这里,必须提供该OCX的ClassID和文件路径或URL。客户端浏览此页面时,先在本地的注 册表中查找该ClassID,如果存在,则不必下载。否则,必须按照CODEBASE指定的路径搜索该控 制并下载。标签Object中的ID是该OCX的对象的名称,用来访问和设置对象属性,调用对象方法 等。
6.3. 用VC5.0开发ActiveX文档 服务器
MFC4.2不支持开发ActiveX容器,但支持ActiveX 服务器。只要在使用MFC AppWizard时生 成应用程序框架时,选择支持Active Document,就可生成标准的ActiveX文档 服务器。运行此 应用程序时,该文档对象将 自动注册。要测试这个ActiveX文档,可以运行任何一个ActiveX文档 容器,如Microsoft Binder、Microsoft Word等,再插入此对象。
6.4. VC5.0的ActiveX 服务器框架
* ISAPI(Internet Server API)
ISAPI提供了扩展支持WEB 服务器的简单而有效的方法。开发人员可以设计生成ISAPI 服 务器扩展动态连接库(ISAPI Server Extension DLL),它可以被HTTP 服务器调用。例如,客户 端用户填写了一个表单,按下“提交”按钮后,输入的 数据将被传送至HTTP 服务器,激活相应的 ISAPI扩展应用程序,该应用程序可以处理用户的输入信息,进行相应的操作。或者,按照用户 的要求访问 数据库,读取用户指定的 数据,动态生成HTML文件,再传回客户端。
* ISAPI 过滤器(ISAPI Filters)
ISAPI过滤器是一种运行在支持ISAPI的HTTP 服务器上的动态连接库。它的作用是:监视 服务器与客户端的事件,当预先指定的某事件发生时,过滤器被调用,对要传递的 数据进行加密 或压缩,或者进行身份认证。换句话说,ISAPI过滤器提供了对 服务器和客户之间传递的 数据进行 预处理的功能。
* ISAPI和通用网关接口(CGI)的比较
ISAPI为WEB 服务器提供了通用网关接口应用程序的替代解决方案。与CGI不同的是,ISAPI 扩展应用程序和HTTP 服务器运行在同一个地址空间,不需要创建新的进程,因而不需要进行那 些进程之间耗费时间的通讯。ISAPI应用程序可以从HTTP服务器中卸载,为其它进程腾出内存空间。 CGI则必须为每一个任务建立独立的执行文件及URL映射,HTTP 服务器收到达每一个请求都将 启动一个新的进程。另外,CGI没有与ISAPI过滤器相对应的功能。
6.5. WinInet(Microsoft Win32 Internet Extensions)
VC5.0提供了开发客户端基于WEB的应用程序的API:WinInet,并将其封装成若干MFC类, 如CInternetSession、CHttpConnection等。使用这些类,开发人员不需了解TCP/IP以及Winsock 的细节,只要针对具体应用建立类对象就可以了。
6.6. Asynchronous Monikers
由于目前 网络带宽的限制,用户通常希望能够异步下载 数据,例如异步下载网页的一张 图片,并显示下载进度。MFC提供了类CAsyncMonikerFile来实现这个功能。
6.7. ActiveX SDK
VC5.0还提供了专门的WIN32 ActiveX开发工具:ActiveX Software Development Kit( ActiveX SDK)。ActiveX SDK包含一系列接口定义及与Internet有关的WIN32函数,包括 ActiveX Scripting Component、Web Browsing Object、WebPost API等,用户可以利用这些接口和API 开发面向WEB的应用程序或ActiveX部件。
6.8. Visual C++ 6.0
1998年9月,Microsoft将推出的Visual C++6.0。VC6.0除了保留VC5.0的ActiveX支持外 ,还将支持DHTML,MFC及ATL的类库及模板也有扩充。用户可以方便地开发出类似WEB浏览器界面 的应用程序。
7. Visual Basic 5.0对ActiveX的支持
7.1. Visual Basic 部件
Visual Basic 5.0(以下简称VB)的部件(Component)是由可执行代码构成的文件(EXE, DLL,OCX),它可以为其他应用程序或者部件使用。以前版本的V B允许用户生成称为"OLE Server" 的部件,VB5.0扩展了部件设计功能,支持引发事件,异步回调(Call-backs)等,并增 强了创建ActiveX控制和ActiveX文档的功能。
VB5.0的ActiveX部件(Component)包括:
* ActiveX控制
ActiveX控制与客户应用程序运行在同一个进程中。用VB5.0创建可用于VB或者其它开发 工具及WEB浏览器的ActiveX控制,与一般的VB应用程序设计大同小异。可以为ActiveX控制加上属 性页,并实时调试。另外,VB5.0提供了一组强大的 数据库存取控制,开发人员只需编写少量代 码就可以完成一般的 数据库操作。
* ActiveX文档
VB5.0的ActiveX文档提供了内置的窗口滚动、超链接以及菜单支持,直接嵌入WEB页中。 编制ActiveX文档与设计VB表单(FORM)完全相同,用户可以选择生成ActiveX Document DLL或 者ActiveX Document EXE。无论哪一种类型,VB都将生成一个类似表单文件的VBD(Visual Basic Document)文件。可以直接用Internet Explorer来浏览这个文件,或者用VBScript或者JScript 进行访问。
* ActiveX DLL
ActiveX DLL提供的对象与应用程序运行于同一个进程中。应用程序可以创建对象,设置 对象属性,调用对象的方法。ActiveX DLL一般不需要建立用户界面。
* ActiveX EXE
ActiveX EXE提供的对象与应用程序运行于在不同的进程中。应用程序创建对象,调用对 象的方法后,可以继续进行自己的工作。当对象的工作完成后,它会通知应用程序。
ActiveX DLL和ActiveX EXE合称为Visual Basic 代码部件(Code Component)。
7.2. 包装ActiveX部件
上述ActiveX部件都可以使用VB5.0的Setup Wizard进行包装,生成采用Lempel-Ziv压缩 算法的CAB文件,在WEB上发布。Setup Wizard将把相关的动态连接库及信息文件一同包装。使用 VB5.0生成的ActiveX 部件,可以包装成Safe Scripting和Safe Initializing。
7.3. ActiveX文档在WEB上的应用
向WEB页面中加入ActiveX文档,首先要将该ActiveX文档包装成CAB文件。由于Internet Explorer读入ActiveX文档时,该文档将取代当前的WEB页,因此,一般将ActiveX文档(即HTML 的标记OBJECT)放在一个独立的HTML文件中。例如,下面这条语句建立了一个超链接:
〈A hRef="ActiveXDoc.htm"〉Link to a ActiveX Document 〈/A〉
其中,ActiveXDoc.htm是下载ActiveX文档的HTML 文件:
〈OBJECT
classid="clsid:2F390484-1C7D-11D0-8908-00A0C90395F4"
codebase="ActiveXDoc.cab#version=1,0,0,0"〉
〈/OBJECT〉
这条语句将下载ActiveXDoc.cab,并在Windows注册表中注册该ActiveX文档。
7.4. Visual Basic 代码部件在WEB上的应用
Visual Basic 代码部件包括ActiveX DLL和ActiveX EXE,它们可以在 服务器端运行,也 可以从客户端下载再运行。
如果某个ActiveX DLL运行在 服务器端, 服务器上运行的是Internet Information Server,则可以使用VB的OLEISAPI2.DLL提供的函数进行访问,或者基于Active Server Pages使用 VBScript或者JScript。
如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB5.0 企业版生成了一个ActiveX DLL:MyDLL.DLL,它只有一个类:MyClass,其唯一的方法是显示LogIn 对话框。用Setup Wizard包装这个部件,生成了CAB文件。下面的语句将在客户端下载MYDLL.CAB:
〈OBJECT ID=MyClass
CLASSID="CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7"
CODEBASE="mydll.cab"〉
〈/OBJECT〉
〈INPUT TYPE=button VALUE="LogIn NOW" NAME="BtnLogin"〉
〈!--When the button is clicked,call the "LogIn" method. --〉
〈SCRIPT language = "VBScript"〉
〈!--
Sub Window_OnLoad
MyClass.Login
End Sub
Sub BtnLogin_OnClick()
MyClass.Login
End Sub
--〉
〈/Script〉
其中,Object ID是这个ActiveX DLL中某个类的名字。当此WEB页面被下载并显示时,MyClass 类的方法LogIn将被调用,并在客户端显示LogIn对话框。
7.3. Visual Basic 6.0
Microsoft计划于1998年9月推出Visual Basic 6.0。目前Beta版正在测试。VB 6.0与VB 5.0 相比,除继续支持Internet Explorer Document Object Model(DOM)开发之外,将提供两 个令人兴奋的新功能:
* Dynamic HTML编辑器
开发人员可以象编制普通VB程序一样,制作DHTML文件或模板。
* WebClasses;
开发人员可以在WEB 服务器端建立与ASP文件一一对应的WebClass类,每个类都可以访问 ASP对象,在Visual Basic IDE中跟踪调试,并生成ISAPI 动态连接库。
8. 小结
正如Internet和WEB 技术一样,ActiveX 技术的发展日新月异,新的更强大的开发工具使 得 服务器及客户端的应用开发、网站建设变得更简单,并容易扩展和重用。随着Microsoft的包括 Windows NT、Internet Information Server、Active Server Pages以及Microsoft FrontPage、 Internet Explorer等组件在内完整的Internet解决方案被广泛使用,ActiveX 技术将会有更 大的发展。