编写ActiveX控件并封装成.cab文件

编写ActiveX控件并封装为.cab文件

需求描述

厂商提供了读卡器的全套工具,包括读卡的测试工具,样例代码,文档等等(一开始的时候没发现这些工具费了很多事),根据提供的dll,封装上面的方法到一个ActiveX控件中,使得插上读卡器的PC设备使用IE浏览器访问网站即可实现读写卡的功能,而无须本地下载读卡工具。简单来说需求就是在ActiveX中引用dll并抛出一些有用的接口。

编写过程

dll调用的过程就不说了,这里一切正常,我写了一个C++类来管理这个dll的调用问题,剩下的就是把写好的类在ActiveX控件中使用即可。

ActiveX控件的创建

1. 本人用的是Visual Studio 2017,新建一个MFC ActiveX项目(没有此选项的应该是没有下载MFC的开发组件,打开下载工具下载即可):

然后一直下一步,这里需要说明一下:

如果写的ActiveX控件没有界面(MFC那种对话框之类的),1处选择none即可,2处的关于对话框可以取消选择。我写的控件只需要提供接口即可,不需要界面,界面由前端网页实现,因此选none。

2. 新建好了之后,我们看到VS工具自动给我们生成了这些文件:

当然这些文件是做什么的我也不知道,不过没关系,我们还是可以直接使用工具来实现我们的功能。这里的关键就是类视图了。

3. 点开类视图,点开后缀为Lib的那个东东,发现里面有两个东西:

这里面就前两个带_下划线前缀的有用,有一个以Events结尾,意思是这里控制着事件响应的方法,不带Events的是普通方法,可以直接被JS调用的方法,右键这里,选择添加栏中的添加方法即可添加想要外部JS调用的方法(接口)了。

4. 点击添加方法之后,弹出一个向导:

发现这里有许多看不懂的返回值,一般来说用得上的就是字符串类型和数字类型了,字符串在这里面的替代类型是BSTR,原本的int类型我这里就使用LONG替代了。这里我们实现一个add两个整数的方法add()。(这里也有坑,不过我这里就不详细聊了,是字符集和编码的问题)

点击完成即可。

5. 我们在解决方案那个视图里找到后缀为Ctrl的cpp文件,我们刚在添加好的方法其实在这里,写好后就可以了。

6. 现在编译这个文件,直接点击F5运行即可,但是会发现有错误:

原因是打开VS的时候不是以管理员权限打开的,而我们运行的时候VS想直接帮我们把这个ActiveX控件编译好的.ocx控件注册到我们计算机中的注册表中,因为没有权限所以注册失败报了错,我们可以手动注册这个控件:

打开管理员的命令控制台,进入到工程目录下的Debug目录,使用regsvr32命令注册我们的.ocx控件。注册成功之后,我们就完成了一半了。注册这步其实就是代表之前我们写在ActiveX控件中的代码已经注册到本地,可以直接使用了,当然也可以由IE浏览器直接调用。

7. 现在随便先写一个HTML文件测试我们的控件能不能用:

重点来了,也是我遇到的一个坑,这里面

posted @ 2017-06-03 23:46  Faverr  阅读(470)  评论(0)    收藏  举报