ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:19.38KB ,
资源ID:12764774      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12764774.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用ATL开发和部署ActiveX网页控件.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用ATL开发和部署ActiveX网页控件.docx

1、用ATL开发和部署ActiveX网页控件用ATL开发和部署ActiveX网页控件 一、前言在B/S结构的系统中,出于安全性考虑一般不准许浏览器访问客户端的硬件资源,如控制打印机,照相机等。对于一个完善系统来说,往往很多时候又需要控制这些资源。通过在浏览器中插入ActiveX插件是一种很好的解决方式。在实际的项目开发中,遇到系统登录需要增加物理身份识别。即在系统登录的时候,除了要验证用户名和密码外,还需要验证硬件USB KEY上的信息。具体业务流程为:客户端程序读取用户硬件USB KEY里的个人信息(即加密认证信息),提交给认证服务器进行认证,认证服务器通过身份识别后,业务系统通过解析返回的XM

2、L信息判断用户是否合法有效,建立起用户和业务系统的信任通道。读取硬件USB KEY的信息我们通过本例的ActiveX控件来完成。硬件USB KEY选用飞天诚信的ePass1000ND产品。二、概念1、ActiveX控件ActiveX是Microsoft提出的一组使用COM(Component Object Model,组件对象模型)使得软件组件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。ActiveX是从Microsoft的复合文档技术OLE成长起来的。其基本的出发点是想让某个软件通过

3、一个通用的机构为另一个软件提供服务,可以将其插入到WEB网页或其它应用程序中。在Internet上的使用,ActiveX特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 但安装的一个前提是必须经过用户的同意及确认。2、COM技术COM是Microsoft组件对象模型的简称。是一个说明如何建立可动态交替更新组件的规范。它提供了客户和组件为保证能够互操作应该遵循的标准。该标准对于组件架构的重要性同其他任何一个具有可交替更新部分的系统是一样的。COM标准包括规范和实现两大部分,规范部分定义了组件和组件之间通信的机制,

4、这些规范不依赖于任何特定的语言和操作系统,只要按照该规范,任何语言都可以使用;COM标准的实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。在COM模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。一般接口是不会改变的。3、ATL技术ATL(Active Template Library)是微软的活动模板库,是一个产生C+/COM代码的框架,专门用于开发COM组件。ATL提供了小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。ATL完全面向COM组件,其结构完全针对COM中的诸多规范。是编写COM组件的快捷工具。三、实现1、项目

5、打开Visual Studio.Net 2005,建立一个解决方案或项目DeanUSBKey。在项目类型中选择Visual C+下的ATL选项,在模板中选择”ATLProject”,项目名为DeanUSBKey。点击确定,系统就在指定的目录下建立了DeanUSBKey项目和解决方案。点击确定后,会出现建立ATL项目向导对话框,引导用户快捷方便的建立ATL项目。点击下一步,进入项目属性设置对话框,如图1所示。可以通过该对话框选择是否属性化和发布方式等。图1 项目属性设置对话框具体选项说明如下:Attributed 即属性化,支持属性化编程,是未来的发展方向,是IDL方案的

6、一种替代方案。Dynamic-link library(DLL) 即动态链接库,表示建立一个 DLL 的组件程序。Executable(EXE) 即可执行文件,表示建立一个 EXE 的组件程序。Service(EXE) 即服务,表示建立一个系统服务组件程序,系统启动后就会加载并执行的程序。Allow merging of proxy/stub code 即允许合并代理/存根代码,选择该项表示把“代理/存根”代码合并到组件程序中,否则需要单独编译,单独注册代理存根程序。Support MFC 即支持 MFC,建议不要选择,除非有特殊的原因,比如我们原来的程序是基于MFC的

7、,我们的组件必须要MFC的支持。一般在写 ATL 程序,不选择该项。但是很多VC程序员对于MFC的数据集合类和字符串类依赖很大,建议采用STL中的相关类进行替代。具体替换方案:1、std:string代替MFC中的CString;2、std:vector代替MFC的数组类如CArray,CPtrArray等;3、std:list替换MFC中的CList等列表类;4、对于BSTR建议采用CComBSTR 类,或_bstr_t类,本例子中就会用到该类;Support COM+1.0 支持事务处理的 COM+ 功能。 我们选择如图1所示的选项,点击完成。ATL Project项目就生成好了,系统会在

8、指定目录下生成一系列文件,ReadMe.txt里有各文件的文件说明。尤其要注意接口定义语言文件(DeanUSBKey.idl),它描述了对象的接口细节。2、组件 在COM模型中,客户请求服务时,是通过接口和组件进行交互的。现在还是一个空的ATL项目,还没有任何组件。添加组件,也就是添加ATL对象类。在DeanUSBKey项目上点击右键,添加类,弹出对话框。在类别中选择ATL。在模板中选择“ATL Simple Object”即ATL简单对象。点击确定,出现建立组件向导。如图2所示,在Short Name输入组件名称USBKey,其它内容系统会自动填写。注意组件名称不能和

9、项目名称重名。点击下一步进入组件选项设置界面。如图3所示图2 ATL简单对象组件名字对话框图3 ATL简单对象组件选项对话框具体选项说明如下:Threading model 即线程模型,COM中的线程,这是一个复杂的部分。我们选单元(Apartment),它代表当在线程中调用组件函数的时候,这些调用会排队进行。如果想了解详细细节可以参看COM技术内幕一书。Interface 即接口,双重(Dual),双重接口表示在一个接口中,同时支持自定义接口和 IDispatch 接口。这个非常重要,为了能够使组件能够在脚本中使用,必须选择双重接口选项。因为脚本语言的解释器只认识 IDispatch 接口。

10、自定义接口(Custom),直接实现的是IUnknown接口。Aggregation 即聚合,写的组件,将来是否允许被其他人以聚合方式(有聚合和包容两种方式)使用。Only(只能创建为聚合),有点类似 C+或Java 中的不能直接创建实例的虚类,如果不是处于设计目的,一般这个选项不用。大多数情况下支持“聚合”,所以我们选择“Yes”。ISupportErrorInfo 是否支持丰富信息的错误处理接口。Connection points 即连接点,是否支持连接点接口(事件、回调)。IObjectWithSite 是否支持IE的调用。我们选择如图3所

11、示的选项,点击完成。USBKey的组件建立完成。在生成的USBKey.cpp里将是接口IUSBKey的实现。3、接口方法在类视图中,IUSBKey接口上点击鼠标右键。在添加项里有添加方法和属性,选择添加方法。打开图4所示的添加接口方法对话框。添加接口方法GetContent,并添加接口方法的参数。in表示参数方向是输入;out表示参数方向是输出;out,retval表示参数方向是输出,同时可以作为函数运算结果的返回值。一个函数中,可以有多个in、out,但retval只能有一个,并且要和out组合后在最后一个位置。详细的定义说明可以参考IDL的语法说明。 图4 添加接口方法对话框在USBKey

12、.cpp文件里添加函数GetContent的具体实现过程。核心代码如下:STDMETHODIMP CUSBKey:GetContent(LONG lFlags, BSTR* pUSBContent) EPAS_STATUS retval;/状态 EPAS_HANDLE epsHandle ; /EPAS句柄/ 创建设备句柄retval = epas_CreateContext(&epsHandle,0,EPAS_API_VERSION);/调用EPAS的API函数访问USB Key硬件 if (FT_SUCCESS != retval) return ReturnError(retva

13、l);/返回相应的错误 / 打开设备 retval = epas_OpenDevice(epsHandle,lFlags,(void *)szAppID); if (FT_SUCCESS != retval) return ReturnError(retval); /得到序列号 unsigned long sn2 = 0; retval = epas_GetProperty(epsHandle,EPAS_PROP_SERNUM,NULL,sn,sizeof(sn); if (FT_SUCCESS != retval) return ReturnError(retval); char m_sn

14、8*1024+17=0; sprintf_s(m_sn, %08X%08X, sn1, sn0);/以16进制打印到字符串m_sn中 /得到加密字符串 /1、登录 char s80 = 1234;/登录密码 retval = epas_Verify(epsHandle,EPAS_VERIFY_USER_PIN,(unsigned char*)s,4); if (FT_SUCCESS != retval)return ReturnError(retval); /2、打开文件 EPAS_FILEINFO epsFileInfo = 0; unsigned long epsFileID = 0x12

15、34;/文件编号 retval = epas_OpenFile(epsHandle,0,epsFileID,&epsFileInfo,sizeof(epsFileInfo); if (FT_SUCCESS != retval)return ReturnError(retval); /3、读取文件内容 unsigned long rLen = 0; unsigned char rBuff8*1024 = 0; ZeroMemory(rBuff,8*1024); retval = epas_Read(epsHandle,0,0,rBuff,epsFileInfo.ulFileSize,&a

16、mp;rLen); if (FT_SUCCESS != retval)return ReturnError(retval); /4、关闭文件retval = epas_CloseFile(epsHandle);/关闭设备,删除Contextretval = epas_CloseDevice(epsHandle);retval = epas_DeleteContext(epsHandle); strcat_s(m_sn,(char*)rBuff); *pUSBContent=_com_util:ConvertStringToBSTR(char *)r_sn); return S_OK; 为了能在

17、函数中使用USBKey厂家提供的访问函数和使用BSTR类,需在stdafx.h头文件里面引入相应的.h和.lib文件。如下:#include FT_ND_API.h/ ePass1000ND的接口头文件#include comutil.h#pragma comment(lib, FT_ND_API.lib)#pragma comment(lib, comsuppw.lib) 如果编译通过,VS.Net IDE会打开窗口选择执行控件的外部文件。选择regsvr32。编译成功后,组件会自动注册。可以在系统组件服务里面查看刚注册的组件DeanUSBKey。4、错误处理COM方法通过返回HRESULT来报告错误,其他信息异常可以通过 IErrorInfo 接口提供给客户端,这里主要讲述HRESULT返回COM方法错误。HRESULT由一个 32 位代码组成。分为四部分,如下:FieldSeverityReservedFacilityCodeBit(s)3129-3016-280-15

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1