ActiveX调用dll打包成cab供客户端下载

来源:互联网 发布:威士忌用什么杯子 知乎 编辑:程序博客网 时间:2024/04/20 14:28

最近项目需要用web页面方式对客户端硬件进行操作,之前一点没接触过,于是乎网上狂找资料。。。。终于历经一个星期,今天总算大功告成,期间遇到很多困难,在网上前辈们发表过的文章的指引下终于搞定了,欣喜。。。。狂喜。。。下面将我的心得和自己觉得要注意的地方简单谈下,不对的地方还请各位高手斧正。。。。嘻嘻。。。

先介绍下我的项目:用jsp调用客户端硬件如读卡器、打印机什么的。起初想用JNI,但想了一下JNI是在web服务器端进行处理,效率自然没有在客户端本地高,于是乎找啊。想啊想 终于找到一种解决方案:ActiveX调用客户端dll,再用javascript调用ActiveX,最后将参数和结果提交给jsp处理。

这种方法将对客户端硬件的处理交给页面中嵌入的ActiveX,但是ActiveX只有浏览器核心是IE的才可用,firefox等这样的浏览器是不能用ActiveX的。没办法,就这么办吧。

怎么制作ActiveX具体步骤我就不说了网上有的是,我用的是VC++6.0MFC做的无对话框的ActiveX,因为之前试了ATL,感觉语法太难懂。MFC开发ActiveX其实跟开发MFC应用程序一样,只是在创建工程的时候创建MFC ActiveX ControlWizard . 项目创建完以后在classes视图中下拉接口Dxx中右键添加方法,之后在方法中实现调用dll就可以。 我的dll没有.lib 和.h文件,所以只能动态调用LoadLibrary();不要忘记使用完要FreeLibrary(dllHandle); 其中,在编译的时候要注意了,要使用release编译,不要使用debug,使用debug编译的在本机运行可以但是拿到别人机器上你生成的AxtiveX.ocx控件注册不上,提示注册缺少模块。具体为什么我不知道,但是换成release后,就很正常。

编译完成后会生成.ocx的文件,就是我们需要的ActiveX,注意的是,调用的第三方dll不会编译进去,是独立存在的,但是可以在发布的时候一起放进ActiveX.cab包里供客户端下载。在本机测试的时候我们经常需要手动注册,手动注册的方法是:regsvr32  AxtiveX目录/ActiveX.ocx 第三方dll放在system32下(这要看你在实现ActiveX时LoadLibrary的路径,当然也可放在跟ActiveX同目录,但是代码上要改,我用的是放在system32下)。

关于打包成.cab文件,大家可以参考这位老兄的:http://wenku.baidu.com/view/55348421af45b307e8719758.html   也可以到我的csdn下载区下载我已经上传。

 

最后就是页面调用了,将IE-->属性-->安全-->自定义级别-->下载未签名的ActiveX控件  中改为“提示”。调用页面代码贴出来:

<html>
<script language="javascript" type="text/javascript">
function button1(){
var s=document.getElementById("mytt");
var val=s.Sum(88,11);
alert(val);
}
</script>

<body>
<input type="button" onclick="return button1()">
<object id="mytt" classid="clsid:DBC8ACFE-D757-40C4-8B1D-0E5E77D2D3B3"  codebase="http://192.168.1.8:8080/manager/release/release.cab#version=1,0,0,1"></object>
</body>
</html>

 

 搞定!

有问题可相互交流。我的QQ:827897649

 

 

 继续说,在编写Activex中要实现IObjectSafety接口,连接地址:http://hi.baidu.com/live36524/blog/item/c337bb10432ef703b8127b34.html

推荐的打包方法还是参考这个吧,比上文那个更好:http://blog.csdn.net/cai5/archive/2008/07/29/2731187.aspx

 

 

原创粉丝点击