OCX 打包 CAB 与 JS 调用具体教程
主要问题是,报错和问题的真正原因没有关系或者说关系不大。甚至非常多时候没有报错。仅仅有不断尝试。
OCX 和 CAB 的关系。
在不注冊的情况下。没办法调用 OCX 。
所以就须要在客户不知情的情况下自己主动对 OCX 注冊。
这也就是 CAB 的作用。
手动注冊 OCX
我们如果。OCX 所在的文件夹是:D:/ocx/xpbutton/xpbutton.ocx
各位能够下载一个工具:Dependency Walker。
OCX 打包 CAB
首先下载 OCX 打包签名工具:ocx 打包签名工具, 訪问password ddb4。
制作签名证书:
makecert.exe -ss xpbutton -n "CN=这里随便" -sv .\xpbutton.pvk -r .\xpbutton.cer
输入三次,password。查看控制台出现 Succeeded 表示成功。
此时生成文件:xpbutton.cert 和 xpbutton.pvk
Cert2Spc.exe .\xpbutton.cer .\xpbutton.spc
此时会生成文件:xpbutton.spc
两条命令结束,我们一共得到三个文件:xpbutton.cer、xpbutton.pvk、xpbutton.spc
对 OCX 进行签名
编写 INF 文件
signature="$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=files
RegisterOCXs=RegisterFiles
[DefaultUninstall]
cleanup=1
Delfiles=files
UnRegisterOCXs=RegisterFiles
[SourceDisksNames]
1 = %DiskName%, "xpbutton.cab", 1
[SourceDisksFiles]
xpbutton.ocx=1
msvcrtd.dll=1
mfc42d.dll=1
mfco42d.dll=1
[RegisterFiles]
%30%\Windows\ocx\xpbutton.ocx
[DestinationDirs]
files=30, Windows\ocx
[files]
xpbutton.ocx=xpbutton.ocx
msvcrtd.dll=msvcrtd.dll
mfc42d.dll=mfc42d.dll
mfco42d.dll=mfco42d.dll
[xpbutton.ocx]
file=thiscab
clsid={134EE1CC-4B8A-4E74-8C41-F4990065E2E1}
FileVersion=1,0,0,1
RegisterServer=yes
[msvcrtd.dll]
file=thiscab
FileVersion=6.0.8337.0
[mfc42d.dll]
file=thiscab
FileVersion=6.0.8168.0
[mcfo42d.dll]
file=thiscab
FileVersion=6.0.8267.0
[Strings]
DiskName="Windows\ocx"
以此类推。
2.
[xpbutton.ocx]
file=thiscab
clsid={134EE1CC-4B8A-4E74-8C41-F4990065E2E1}
FileVersion=1,0,0,1
RegisterServer=yes
进行简单解释:
因为是 64 位系统,本人測试这么写没问题。
OCX 打包 CAB 文件
CABARC.EXE -s 6144 n xpbutton.cab xpbutton.ocx xpbutton.inf
对 CAB 文件签名
对 CAB 文件签名的过程,能够查看上文对 OCX 文件签名的过程,除了第一步此处选择的是 CAB 文件之外。其余步骤全然同样。
非常多教程都到此为止。事实上 OCX 的繁琐远还没有结束。
JS 调用 OCX(CAB)
引入 OCX 控件
仅仅修改冒号 : 后面部分即可了。(本人不小心把 clsid: 这一部分漏掉了,写成了 classid="134EE1CC-4B8A-4E74-8C41-F4990065E2E1",结果 CAB 文件下载不下来)。注意:千万别漏了 clsid。
xpbutton.cab 文件。“./”表示当前路径,也就是 html 所在的路径。
后面的 "#version=1,0,0,1" 表示当前 OCX 的版本。也就是 CAB 压缩包中 INF 文件中面写的 OCX 的版本(FileVersion)。注意版本:1,0,0,1 是用逗号 "," 分隔。不是点号 "." ,假设你用了点号 "."。那么恭喜你,你又错了。
clsid 就固定了。此 OCX 无论注冊到哪台电脑上,查看注冊表。clsid 都是一样的,不会改变。这也就是为什么我们在 HTML 里面,直接能够写上 clsid 的原因。由于客户下载 CAB ,自己主动注冊后,OCX 的 clsid 就是我们编写 C++ 时候规定的 clsid。
JS 调用 OCX 方法
DLL 就可以。
(研究 OCX 留下的后遗症。总认为某些软件会缺少 DLL )
所以。我们必需要在这里 try catch 手动弹出错误信息。但问题事实上也没有那么简单,即使是有报错信息,提示也让人摸不到头脑。
1. [object Error]、Error:找不到成员
,大多数情况下是不会报不论什么的错误的。即使是由于缺少 DLL 没有注冊成功。也没有不论什么提示。本人在非常多电脑上測试的结果是,仅仅有一台 Win7,出现了缺少 DLL 的报错示,其它全部电脑都没有不论什么的错误提示。这里特别须要注意:打包 CAB 文件后,请用多台电脑进行測试,最好測试不同的系统。也尽量能够挑选公司非开发人员的电脑。
千万别在自己电脑上測试通过,或者某些 OCX 开发人员电脑上測试通过后便觉得其没有问题。
解决此问题的根本办法是改动浏览器设置。
至此,OCX 的相关知识已经所有介绍完成,此教程应该能够帮助大家少走一些弯路。这也是近期两个星期的研究成果。
2015.08.26 补充
1.注意:假设使用了 Java 开发,后台使用了 Spring。则应该在 Web.xml 中加入以下的代码。
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.cab</url-pattern>
</servlet-mapping>
上面代码告诉 Spring 不要拦截 *.cab 静态文件。
2.JSP 引入 CAB 文件
<div style="display:none;">
<object id="readcardOCX" width=400 height=100
classid="clsid:F6F2B22E-FC89-489F-967B-9676EB269F55"
CODEBASE= "${pageContext.request.contextPath}/cab/readcard.cab#version=1,0,0,1"
></object>
</div>
在project中引入 CAB 文件,我们须要写
CODEBASE= "${pageContext.request.contextPath}/cab/readcard.cab#version=1,0,0,1"
${pageContext.request.contextPath} 表示project名
cab 文件存放在 webapp/cab 以下
OCX 打包 CAB 与 JS 调用具体教程的更多相关文章
- webpack入门之打包html,css,js,img(一)
webpack到底是什么,网上一大堆介绍的东西,越看越不知道说的什么,所以今天打算自己来记录一下这段时间学习webpack的成果, webpack就是打包文件用的,html,css,js,img,为什 ...
- vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50802280 js调用ocx控件的接口函数,先看demo效果: 简单测试过程 ...
- MFC Activex 开发、ocx打包成cab、部署、测试、自动升级
小小抱怨下:也许是MFC现在用的人少的缘故.在国内和国外都基本上找不到什么全的资料.特别是ocx打包成Cab时的安装文件inf的编写方面,国内基本上是copy,抄的还一知半解.查找个资源真心的累啊.现 ...
- JS调用Delphi编写的OCX控件
原文:http://www.mamicode.com/info-detail-471283.html 一.使用Delphi XE2编写OCX控件 生成OCX工程: 1.File-New-Other,在 ...
- 【FLEX教程】#007 如何让JS调用SWF里的方法
HTML中,JS如何调用SWF里面已经封装好的代码呢? 有一些事情Flex没办法实现的,需要通过调用JS来实现. eg: 当浏览器窗体关闭的时候,弹出一个对话框,提示用户是否退出?或者是否保存当前的操 ...
- Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)
Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. ...
- FLASH CC 2015 CANVAS (二)html中写JS调用flash中的元件、函数、变量
注意 此贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新 当你导出第一个canvas后,你会在保存fla的文件夹里 (每个项目默认位置)看到 如下文件,(请先 ...
- Xilium.CefGlue利用XHR实现Js调用c#方法
防外链 博客园原文地址在这里http://www.cnblogs.com/shen6041/p/3442499.html 引 Xilium CefGlue是个不错的cef扩展工程,托管地址在这里 ht ...
- PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码
PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...
随机推荐
- data和string类型之间的相互转换
package main; import java.text.SimpleDateFormat;import java.util.Date; import freemarker.core.ParseE ...
- (2)HTML元素与属性(已入垃圾框)
HTML元素 开始标签常被称为起始标签(opening tag),结束标签常称为闭合标签(closing tag) HTML 文档由嵌套的 HTML 元素构成 以上实例包含了七个 HTML 元素 &l ...
- 动态代理在WEB与JDBC开发中的应用
WEB案例 目前有一个2005年开始,基于Struts1的Web项目A,其验证部分依赖于主站的SSO(单点登录).在请求站点A的时候,用户会被强制带去做SSO验证,通过身份验证后后,主站会自动地把请求 ...
- vue+vux+es6+webpack移动端常用配置步骤
1.创建项目(vue项目的流程就不多讲了)2.cnpm install vux --save3.在build/webpack.base.conf.js配置:const vuxLoader = requ ...
- Knockout 实例
定义见:http://baike.baidu.com/item/Knockout/18611883#viewPageContent 此处仅列举一个小例子 <p> <select da ...
- 梦想CAD控件安卓文字样式
增加文字样式 用户可以增加文字样式到数据库,并设置其字体等属性,具体实现代码如下: // 增加文字样式 //getCurrentDatabase()返回当前数据库对象 //getTextstyle() ...
- 监听微信端,手机端,ios端的浏览器返回事件,pc端关闭事件
直接上代码了,可以监听微信端,手机端,iOS端的浏览器返回事件,关闭事件不支持 当进入该页面,我们就给这个history压入一个本地的连接.当点击返回.后退及上一页的操作时,就进行监听,在监听代码中实 ...
- Python学习第二阶段Day2,模块subprocess、 logging、re
1.logging 日志开关,设置全局只打印什么级别的日子,默认是warning以下的都不打印 改默认级别:依次升高 logging.debug("") logging.info( ...
- man中文手册安装
转载自 https://www.cnblogs.com/fyc119/p/7116295.html man中文手册安装 下载源码 wget https://src.fedoraproject.org/ ...
- 微信小程序理解8大误区,你中招了吗?
2016年年底程序员话题中最火的是什么?莫过于微信小程序!小程序被炒得沸沸扬扬,再次证明一点,微信想让什么火,真的就能让什么火!这种能力真是全中国再也没有人有了,政府也没有.但是,小程序刚刚开始,你对 ...