由於前段時間要為一個項目定制一個電子地圖+視頻監控系統,考慮到公司現有的開發資源C#項目組)及已經完成的下層業務框架C++實現),選擇了.net技術結合ActiveX來實現需求。由於下層業務框架是我編寫的,所以開始了自己的編寫Activex插件之旅。
按照我的習慣在接觸一個新技術時並不會匆匆開始上手實現,而是在了解基本原理之後再著手。所以通過各種百科了解了一些關於ActiveX的背景和使用場景。又深入其背後的COM技術浏覽了潘愛民老師的《COM本質論》這本書,了解了一下Activex背後的思想。於是乎在理清了ActiveX的基本脈絡後開始了業務插件的編寫。
方法接口是這麼一個過程,調用——>等待結果返回。可是一個同步方法接口再結合js的單線程特性在界面端體驗方面卻有一個致命缺陷,在等待這個接口返回的時候整個界面會僵死,不能響應任何動作。
異步方法接口雖然能立馬返回,但又如何來獲取最終結果呢?剛好,事件接口可以解決這個問題,我們可以在前台注冊這個事件,然後由ActiveX後台來響應這個事件,從而前台可以獲取正確的結果,類似於我們熟悉的回調函數。 推薦阮一峰的這篇文章《Javascript異步編程的4種方法》來了解下以上我說的兩種情況。
就這麼簡單?可是現實仿佛並不是如此,我們要把一個接口寫成異步接口,肯定要在接口內部開啟一個線程來執行耗時較長的操作,然後在操作完成後響應事件通知上層獲取數據。這裡有個坑,你要是在所啟線程中去響應事件接口,前台是無法響應的。怎麼辦呢?解決方案在這裡《How to start a second thread in an MFC-based ActiveX control to fire events in Visual C++》。
“愛遺忘這人類天性”也絕對是我們程序員的一個殺手锏,不說別的,影響工作效率!我一個月前寫完了幾個方法接口、事件接口後昨天因為需求更改再寫時居然忘了IDE的快捷途徑了,求助了google大神後搞定,所以我得為幾個點建一個備忘錄。
備忘錄1:如何在工程裡添加方法、事件接口
在這貨這裡添加方法:
在這貨這裡添加事件:
注:如提示找不到事件接口的錯誤,自己手動在相應位置加上就好)
備忘錄2:ActiveX插件測試調試的兩大利器
TstCon32.exe,Microsoft ActiveX Control Pad;
備忘錄3:js腳本調用方法,事件的代碼示例
這幾點可以說明問題
另外還有些ActiveX空間的簽名打包類的知識,很多前端的文章都有介紹,我就不在這獻丑了。
本文出自 “永遠的朋友” 博客,請務必保留此出處http://yaocoder.blog.51cto.com/2668309/1325664