ActiveX 技术是微软出品,这样就导致整个系统只能使用 IE 浏览器(其他浏览器可以通过插件的形式支持 OCX 的调用)。
OCX插件制作
- Vs2015,并安装好qt5.9.5
- Iis(可从网上搜索IIS配置步骤)
- 创建QtActiveQtServer程序(QtOcxTest)
- 编写ocx插件程序
- 进行编译
- 在debug目录下找到对应项目的dll文件
- 这个dll文件就是ocx插件(也可把后缀改成.ocx)
- 利用windeployqt命令进行qt依赖库的导入
4.进行qt依赖库导入
Inf安装信息文件制作
- 在debug文件夹下新建文本文档(.txt),将后缀改成(.inf),名字改成default
- 双击或者使用notepad++打开,进行编辑,内容如下所示:
- 解释几个部分:
1.这里面添加了5个dll,如果不需要将 dll 打包到 cab ,则可以删除对应dll的相关信息。
2.
[QtOcxTest.dll]
file-win32-x86=thiscab
clsid={274848a0-ecab-4151-922f-f7e26e7f955a}
DestDir=11
FileVersion=1,0,0,0
RegisterServer=yes
进行简单解释:
file-win32-x86=thiscab由于是32位编译器编译,这么写没问题。64位也可以这样写: file=thiscab
clsid 这里,最简单的办法是找到 ocx 的来源,询问制作 ocx 作者,他们知道这里应该填写什么。
如果找不到制作人,也有办法,手动注册 ocx ,然后查看搜索注册表
FileVersion 也是一样,最好的办法,找到 ocx 的来源(开发者),确定版本号,编写 ocx 时,代码中会有 ocx 对应的版本号。这里的版本信息必须和 OCX 的版本信息一致。
RegisterServer=yes 表示下载下来后自动注册此 ocx 。
其他的 dll 文件的代码中都没有这一句,意思是 dll 下载下来后不需要注册。
3.对 INF 文件中其他dll的FileVersion部分进行解释
表示 dll 的版本号,如何确定 dll 版本号? 找到对应的 dll 右击,查看属性,这里的文件版本,就是我们需要的版本号,注意,不是产品版本。
打包CAB
- 使用iexpress生成cab文件
- 打开运行,输入iexpress,或者在cmd中输入iexpress回车,打开iexpress压缩程序
- 进行相关选项勾选
add选择inf文件,依赖库文件以及ocx文件
Html文件制作
- 在cab所在文件夹下新建文本文档(.txt),将后缀改成(.html),名字任意
- 使用notepad++打开,进行编辑,内容如下所示:
- 此classid就是之前inf中的classid,codebase为打包成的cab名字,version为发行版本
- 将html文件与cab文件放在对应网站的服务器文件夹下即可
IE无法加载Ocx的解决方法
1.打开使用ie打开对应html如下显示
打开ie的设置,选择Internet选项
2.打开使用ie打开对应html,显示已阻止cab安装
- 解决办法:关闭防火墙和杀毒软件
3.打开浏览器,并未弹出任何提示,但界面并未加载
- 打开设置-管理加载项,显示已经加载此控件,解决办法:在代码中将对应控件构造函数最后添加this->show();
如图所示
- 打开设置-管理加载项,没有显示此控件,可能原因:模块与正在运行的windows版本不兼容,确认方法:查找注册表,如果没有,打开cmd,输入regsvr32 控件名,回车.如下图显示