您的当前位置:首页正文

WEB调用oxc控件教程

2021-04-07 来源:独旅网
关于WEB调用oxc控件教程

一. OCX制作过程:

1. 编写OCX控件

1)创建工程:开发工具vs 2008 ,创建一个新的工程,选择“MFC ActiveX 控件”。

2)添加接口:打开类视图,展开XXXLib(XXX表示工程名称),下面有个_DXXX项,右键->“添加”->”添加方法”。要注意的是,接口的参数类型要跟JS一致,数字型的参数用SHORT,字符串型的参数用BSTR,如果不一致,JS在调用接口时会提示“参数类型不匹配”错误。

3)编译控件:编译时选择静态编译,这样在没有安装VS环境的机器上也能使用该控件。

设置方法:

工程属性->配置属性->常规->MFC的使用->在静态库中使用MFC。 2. 制作CAB包:

将ocx文件以及第三方dll文件打包成cab文件: Internet 软件分发单位是“软件包”,它由包含.INF文件或软件分发.OSD文件(或两者都包括)的.CAB文件所组成。

一个分发单位也可以包含软件组件,

如 ActiveX 控件(.OCX)、.DLL文件、.EXE文件、Java类文件或小程序。当Web页上OBJECT元素的CODEBASE特性引用包含.INF文件的.

CAB文件时,Internet Explorer将自动把.CAB文件作为软件分发单位下载并安装,每次访问时还会自动检测版本并进行更新。

INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如.DLL或者其它.OCX)。一个.INF文件就捆绑了.

CAB压缩文件所有的必须文件。 缺省情况下,与现有硬盘中文件版本号相同的文件不被下载。

先自己写了一个inf文件,其中信息包括将.ocx文件,以及相关的.dll文件打包,并下载到文件夹:\\WINDOWS\\system32,详细标注如下:

[version]

signature=\"$CHINA$\" AdvancedINF=2.0 [Add.Code]

pcpos.ocx=pcpos.ocx Comm.dll=comm.dll [pcpos.ocx]

file-win32-x86=thiscab RegisterServer=yes

clsid={719A1D6E-7099-4123-9D63-F0118AFF2D61} DestDir=11

FileVersion=1,0,0,1 [Comm.dll]

file-win32-x86=thiscab

RegisterServer=yes DestDir=11

FileVersion=1,0,0,1 [RegisterFiles] %11%\\pcpos.ocx 注释:

\"thiscab\" 是一个关键字,意指包含该INF的CAB文件。也可以从网上下载所需要的DLL文件,只要指定一个HTTP 网址即可,如:

file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL 关键字\"file-win32-x86\" 指定平台是 x86。 文件版本号可见属性。

\"DestDir\"指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/ /SYSTEM32;

\"clsid\" 指的是要安装控件的CLSID。 制作cab:

使用\\WINDOWS\\system32\\iexpress.exe。

1) 选择“Create new Self Extraction Directive file”,点击下一步。 2) 选择“Create compressed files only(ActiveX Installs)”,点击下一步。 3) 点击Add,文件添加(pcpos.ocx,pcpos.dll,comm.dll,tcpclnt.dll),点击下一步。

4) 点击Browse,输入.CAB文件的存放地址(包含所取文件名),这里取TestCAB.CAB,并且要选中 “Store files using Long File Name inside Package”。点击下一步。

5) 选择“Don’t save”,一直点击下一步,直到完成。 注意:

如果控件已经在客户机注册,并且不是通过.CAB的方式注册,那么通过.CAB自动注册的时候,该控件将无法被更新。必须先手动删除该文件。

3. 对CAB文件进行数字签名

传说中数字签名之后就可以不出现提示而自动下载,所以也试试: 在\\Microsoft Visual Studio .NET 2003\\SDK\\v1.1\\Bin 中间有三个小工具,就用他们来实现数字签名。

Makecert.exe ---证书创建工具

Cert2Spc.exe ---发行者证书测试工具 Signcode.exe ---文件签名工具 步骤:

1) makecert -ss name -n \"CN=公司名\" -sv d:\\pos.pvk -r d:\\pos.cer 其中sk-表示主题的密钥容器位置,

ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置,-sv 导出私钥文件(为了签名使用)。

注意:这个时候会让输入三次密码,三次要完全一致。 2) 使用Cert2Spc生成spc发行者证书(可选):cert2spc d:\\pos.cer c:\\pos.spc

3) 双击signcode,不带参数会启动签名向导。先选择要签名文件,下一

步,选择“自定义”,

下一步,选择“从文件选择”,添加刚生成的pos.cer证书,下一步,选择刚生成的私钥pos.pvk,再下一步,

可spc证书,再一直下一步。添加时间戳,在时间戳填入http: //timestamp.verisign.com/scripts/timstamp.dll TestCAB.CAB,

再下一步完成。

这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安转。

文件属性->数字证书->详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。

二. 在web中调用:

1. JSP中以标签载入控件

1) Classid:解压CAB文件 寻找INF配置文件找到 ocx的clsid

复制到此处

CODEBASE:将CAB文件放入项目WebRoot 下建立的文件夹内,并在该属性上填写CAB文件路径,“#”,以及ocx的版本号;此处需要注意文件名称的大小写;

2) 写入四个参数即可

2. 开启web服务打开包含控件的页面,安装控件,需要注意:

1) 若没有安装按钮则需要将ACTIVEX的控制等级降低 2) 安装完成后刷新页面,如果还出现安装提示:

1. 可能是clsid及文件版本未填写正确

2. 与cab中inf文件对比后若CLSID及版本号都无误时,控件需要

制作者重新给出一个clsid;

3) 若没有出现安装提示,则证明安装完成

4) 控件的卸载:关闭页面后windows\\system32\\ 目录下 dll文件(解压

CAB对比)删除,windows\\Downloaded Program Files\\目录下 ocx文件名的控件删除

3. 调用控件函数:

1) 对于没有返回值、没有传入参数的函数 直接调用即可;

2) 没有返回值,但需要JS传递给控件函数参数的 ,控件函数中的参数

类型不能带有指针类型参数(如BSTR * 这种类型的就不行),会报出”类型不匹配”错误;一般情况下控件函数的参数对应js类型 short----int BSTR----string 3) 带有返回值的,返回值类型不能为指针类型同ii,返回值一般为short,

long等类型可用alert()在页面调出,可以用来查看控件函数调用情况

因篇幅问题不能全部显示,请点此查看更多更全内容