ATL开发和部署ActiveX网页控件
摘 要 ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程。学习使用ActiveX让浏览器访问客户端的硬件资源。
关键字 ATLActiveX控件,COM组件
 

一、前言
B/S结构的系统中,出于安全性考虑一般不准许浏览器访问客户端的硬件资源,如控制打印机,照相机等。对于一个完善系统来说,往往很多时候又需要控制这些资源。通过在浏览器中插入ActiveX插件是一种很好的解决方式。
在实际的项目开发中,遇到系统登录需要增加物理身份识别。即在系统登录的时候,除了要验证用户名和密码外,还需要验证硬件USB KEY上的信息。具体业务流程为:客户端程序读取用户硬件USB KEY里的个人信息(即加密认证信息),提交给认证服务器进行认证,认证服务器通过身份识别后,业务系统通过解析返回的XML信息判断用户是否合法有效,建立起用户和业务系统的信任通道。读取硬件USB KEY的信息我们通过本例的ActiveX控件来完成。硬件USB KEY选用飞天诚信的ePass1000ND产品。
二、概念
1ActiveX控件
ActiveXMicrosoft提出的一组使用COMComponent Object Model,组件对象模型)使得软件组件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。
ActiveX是从Microsoft的复合文档技术—OLE成长起来的。其基本的出发点是想让某个软件通过一个通用的机构为另一个软件提供服务,可以将其插入到WEB网页或其它应用程序中。
Internet上的使用,ActiveX特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 但安装的一个前提是必须经过用户的同意及确认。
2COM技术
COMMicrosoft组件对象模型的简称。是一个说明如何建立可动态交替更新组件的规范。它提供了客户和组件为保证能够互操作应该遵循的标准。该标准对于组件架构的重要性同其他任何一个具有可交替更新部分的系统是一样的。
COM标准包括规范和实现两大部分,规范部分定义了组件和组件之间通信的机制,这些规范不依赖于任何特定的语言和操作系统,只要按照该规范,任何语言都可以使用;COM标准的实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。
COM模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。一般接口是不会改变的。
3ATL技术
ATLActive Template Library)是微软的活动模板库,是一个产生C++/COM代码的框架,专门用于开发COM组件。ATL提供了小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。ATL完全面向COM组件,其结构完全针对COM中的诸多规范。是编写COM组件的快捷工具。
三、实现
1、项目
打开Visual Studio.Net 2005,建立一个解决方案或项目DeanUSBKey。在项目类型中选择Visual C++下的ATL选项,在模板中选择”ATL Project”,项目名为DeanUSBKey。点击确定,系统就在指定的目录下建立了DeanUSBKey项目和解决方案。
点击确定后,会出现建立ATL项目向导对话框,引导用户快捷方便的建立ATL项目。点击下一步,进入项目属性设置对话框,如图1所示。可以通过该对话框选择是否属性化和发布方式等。

1 浏览器的activex控件项目属性设置对话框
具体选项说明如下:
Attributed 即属性化,支持属性化编程,是未来的发展方向,是IDL方案的一种替代方案。
Dynamic-link library(DLL) 即动态链接库,表示建立一个 DLL 的组件程序。
Executable(EXE) 即可执行文件,表示建立一个 EXE 的组件程序。
Service(EXE) 即服务,表示建立一个系统服务组件程序,系统启动后就会加载并执行的程序。
Allow merging of proxy/stub code 即允许合并代理/存根代码,选择该项表示把“代理/存根”代码合并到组件程序中,否则需要单独编译,单独注册代理存根程序。
Support MFC 即支持 MFC,建议不要选择,除非有特殊的原因,比如我们原来的程序是基于MFC的,我们的组件必须要MFC的支持。一般在写 ATL 程序,不选择该项。但是很多VC程序员对于MFC的数据集合类和字符串类依赖很大,建议采用STL中的相关类进行替代。具体替换方案:
1std::string代替MFC中的CString
2std::vector代替MFC的数组类如CArrayCPtrArray等;
3std::list替换MFC中的CList等列表类;
4、对于BSTR建议采用CComBSTR 类,或_bstr_t类,本例子中就会用到该类;
Support COM+1.0 支持事务处理的 COM+ 功能。
    我们选择如图1所示的选项,点击完成。ATL Project项目就生成好了,系统会在指定目录下生成一系列文件,里有各文件的文件说明。尤其要注意接口定义语言文件(DeanUSBKey.idl),它描述了对象的接口细节。
2、组件
  COM模型中,客户请求服务时,是通过接口和组件进行交互的。现在还是一个空的ATL项目,还没有任何组件。
添加组件,也就是添加ATL对象类。在DeanUSBKey项目上点击右键,添加类,弹出对话框。在类别中选择ATL。在模板中选择“ATL Simple Object”即ATL简单对象。点击确定,出
现建立组件向导。如图2所示,在Short Name输入组件名称USBKey,其它内容系统会自动填写。注意组件名称不能和项目名称重名。点击下一步进入组件选项设置界面。如图3所示

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。