1. 程式人生 > >外掛技術原理及其C#實現

外掛技術原理及其C#實現

    外掛是一種遵循統一的預定義介面規範編寫出來的程式,應用程式在執行時通過介面規範對外掛進行呼叫,以擴充套件應用程式的功能。外掛在英文中通常稱為plug -in、plugin或者plug in.外掛最典型的例子是Microsoft的ActiveX控制元件和COM(Component Object Model,部件物件模型)實際上ActiveX控制元件不過是一個更高繼承層次的COM而已。此外還有Photoshop的濾鏡(Filter)也是一種比 較常見的外掛。

    關於ActiveX和COM在Microsoft的。Net Framework 推出的之前(大約是2003年之前吧),ActiveX和COM可是炙手可熱的技術啊!在那個年代,一個頂尖的VC++高手的標誌是什麼?是會COM編 程!不知道IUnkonw介面和QueryInterface函式,你怎麼可能通過Microsoft的MCSD認證考試?

    現在當然不同了,我曾經見過不少斷言COM和ActiveX已經消亡或終將消亡的文章。但是不管怎麼說,個人認為,ActiveX和COM代表了外掛技術的最高境界,通過對ActiveX和COM的研究,我們可以對外掛有更深刻的認識。

    外掛技術過時了嗎?

    COM技術的逐漸淡出,使不少程式設計師產生了困惑:外掛技術已經過時了嗎?

    NO!至少我不這樣認為!畢竟,沒有了外掛技術,我們還有什麼更好的方法為應用程式提供執行時的功能擴充套件呢?

    COM的沒落自然有其原因,例如程式設計實在是太複雜而難以掌握,還有就是在這個病毒和木馬肆虐的年代,其安全性也令人堪憂。但至少我們可以看到,外掛技術的成功應用還是有的:比如PhotoShop的濾鏡,比如各大主流工控軟體的功能擴充套件。

    關於ActiveX控制元件和COM技術的詳細介紹,有興趣的朋友不妨去“百度一下”,相信能夠獲得很多相關資訊的。

    對於外掛的理解,我們應該注意以下幾點:一、外掛是遵循統一的預定義介面規範編寫的。

    下面我以微軟的ActiveX Control Test Container為大家解釋一下外掛的介面定義。

    1、開啟VS.NET 2005;2、點選主選單的“工具”選單;3、如果在“工具”選單中未找到“Activex Test Container”,則點選“工具”-〉“外部工具”,在“外部工具”對話方塊的“選單內容”列表框中,選中“Activex Test Container",然後點選右上角的"新增”按鈕,再點選左下角的“確定按鈕”,此步驟將在在“工具”選單中新增“Activex Test Container”選單項;

    4、點選主選單的“工具->Activex Test Container”選單項,執行“Activex Test Container" ;
   

檢視更多精彩圖片

    5、在“Activex Test Container”程式中點選“編輯->插入新控制元件”選單;

    6、在“插入控制元件”對話方塊中找到“日曆控制元件 11.0" 控制元件,點選確定;

檢視更多精彩圖片

    7、點選“控制元件”-〉“呼叫”方法,彈出“呼叫方法”對話方塊,按下圖所示的方法將日曆控制元件的背景色設定為紅色;

檢視更多精彩圖片


    
    在這裡,“BackColor”是一個預定義的通用的Activex控制元件介面函式,用於設定控制元件的背景顏色。
   
    二、應用程式是在執行時呼叫外掛以實現功能擴充套件的
   
    外掛最吸引人的地方當然就是其所實現“執行時(run-time)"功能擴充套件。這意味著軟體開發者可以通過公佈外掛的預定義介面規範,從而允許第三方的軟體開發者通過開發外掛對軟體的功能進行擴充套件,而無需對整個程式程式碼進行重新編譯。

    執行時(run-time)是相對於編譯時(assembly-time)而言的。一般來說,軟體開發者對軟體功能更新時,是在原始碼級別進行更新,然後對整個程式進行重新編譯,進而釋出應用程式的新版本,這就是編譯時(assembly-time)的軟體更新。

    三、外掛技術的優缺點

    執行時的軟體功能擴充套件其優點是顯而易見的:

    1、對軟體的開發者而言,只需對主程式和某些常用外掛進行更新和維護,然後通過公佈外掛介面吸引第三方的軟體開發者對主程式的功能進行擴充套件,這是一種“我為人人,人人為我”的雙贏策略;

    2、對終端使用者而言,可以通過有選擇地購買第三方提供的外掛實現自己所需要的功能,從而實現最佳價效比組合,以節省不必要的開支。

    但是,執行時的軟體功能擴充套件也有其弊端:

    1、為實現執行時的軟體擴充套件,程式開發者必須編寫更多、更復雜的程式碼,從而會對程式的執行效率產生一定的影響。關於這一點,我會在第二講中詳細論述;

    2、由於外掛是在執行時載入的,因此第三方外掛可能對使用者造成危害。這種危害通常可以分為兩類:

    (1)由於外掛開發者的技術水平原因導致的外掛BUG,這種BUG可能導致記憶體洩露、宕機、資料丟失等等故障,從而影響到使用者對軟體的使用;

    (2)外掛開發者惡意開發類似於病毒和木馬的外掛,竊取或毀壞使用者資料,使使用者遭受不必要的損失;
    為了避免此類缺點,軟體開發者可能需要付出額外的代價,如需要對第三方外掛進行檢驗和認證,或者乾脆不對外提供外掛開發介面,僅由自己提供外掛。