ActiveX調用dll打包成cab供客戶端下載

最近項目需要用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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章