ActiveX開發知多少?

由於前段時間要爲一個項目定製一個電子地圖+視頻監控系統,考慮到公司的現有的開發資源(C#項目組)及已經完成的下層業務框架(C++實現),選擇了.net技術結合ActiveX來實現需求。由於下層業務框架是我編寫的,所以開始了自己的編寫Activex插件之旅。

按照我的習慣在接觸一個新技術時並不會匆匆開始上手實現,而是在瞭解基本原理之後再着手。所以通過各種百科瞭解了一些關於ActiveX的背景和使用場景。又深入其背後的COM技術瀏覽了潘愛民老師的《COM本質論》這本書,瞭解了一下Activex背後的思想。於是乎在理清了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:如何在工程裏添加方法、事件接口

    在這貨這裏添加方法:

    211951938.jpg

    在這貨這裏添加事件:

    212042406.jpg

    (注:如提示找不到事件接口的錯誤,自己手動在相應位置加上就好)

  • 備忘錄2:ActiveX插件測試調試的兩大利器

    TstCon32.exe,Microsoft ActiveX Control Pad;

  • 備忘錄3:js腳本調用方法,事件的代碼示例

這幾點可以說明問題

212129775.jpg


另外還有些ActiveX空間的簽名打包類的知識,很多前端的文章都有介紹,我就不在這獻醜了。

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