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) ...
随机推荐
- Spring.Net学习笔记(5)-集合注入
一.开发环境 系统:Win10 编译器:VS2013 .net版本:.net framework4.5 二.涉及程序集 Spring.Core.dll 1.3.1 Common.Loggin.dll ...
- 【转】jvm收集器
HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...
- UVM基础之---------uvm factory机制register
factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在 ...
- Angular——依赖注入
基本介绍 1.AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 2.所谓依赖注入是指在运行时自动查找依赖关 ...
- mongodb GUI工具
人性化,界面工具 网上搜索找的一些 1. 官方网站 tools 2. adminMongo 这个也是我在使用的 3. MongoClient 4. NoSQL Manager for MongoDB ...
- oracle中的冷热备份
oracle有四种备份方法:冷备份.热备份.RMAN备份.逻辑备份. 其中冷备份和热备份都是用操作系统命令对oracle文件直接进行拷贝, 不同的是冷备份是把数据库关闭后再备份,备份过程中也要关闭数据 ...
- 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
前情提要 前阵子写了一篇无插件纯Web 3D机房,介绍了如何用html5在网页上创建无插件的精美3d机房场景.这两个月以来,陆续收到很多朋友的鼓(膝)励(盖),受宠若惊之余,对索要源代码的朋友都已经尽 ...
- 59.关系型与document类型数据模型对比
现假设有如下两个类: class Department(object): def __init__(self, dept_id, name, desc, employees=[]): self.dep ...
- CCF201612-2 工资计算 java(100分)
试题编号: 201612-2 试题名称: 工资计算 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假 ...
- python基础面试题30问(附带答案)
1. 闭包 定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个参数a, 内层函数依旧传入一个参数b, 内层函数使用a和b, 最后 ...