1. 程式人生 > >C++實現外掛構架 之 入門篇

C++實現外掛構架 之 入門篇

Plug-in is Everywhere
                                                        ——Plug-in是一種理念


在一個典型的應用開發過程中,我們必須在設計開發階段滿足所有既定的需求。然而軟體開發並非一勞永逸之事,客戶對功能的需求永無休止,他們會提出各種各樣稀奇古怪的需求,這就迫使軟體設計者在體系架構上下功夫。目前,Plug-in(外掛)體系架構被認為是避免重複勞動、縮短髮布週期、提高可擴充套件性、吸引使用者的良方。使用Plug-in技術允許第三方開發者擴充其功能的例子比比皆是,就連鼎鼎大名的Microsoft也在Office、Visual Studio等產品中加入了add-in功能。成功的開源專案無一例外地採用了Plug-in架構,如Eclipse、Firefox。

什麼是Plug-in架構呢?簡單地講,它是一個框架(Framework),允許一個程式在啟動時搜尋擴充套件的功能,然後允許Plug-in與自己協作。

怎樣才能讓Plug-in為我所用?一個非常簡單的方法就是利用DLLs。當程式啟動時,搜尋指定路徑下的任何DLLs,然後查詢這些DLLs是否滿足給定的介面,如果滿足就說明DLL是這個程式的外掛。

關鍵:明確定義介面!

請記住:PCI-Express決不可能直接插AGP顯示卡!

下面是一個簡單的Plug-in應用的初始化流程:

1、程式啟動;

2、Init函式在指定的目錄下搜尋所有的DLLs;

3、程式試著在每一個找到的DLL中獲取Load函式,如果失敗,說明這個DLL不是符合規範的外掛;

4、如果Load函式呼叫成功,程式會快取每個有效DLL對應的模組控制代碼,為後面使用外掛功能做準備;

5、在程式執行期間,使用者選擇一個選單項,於是對應的功能被呼叫;

6、在程式結束時,Unload函式被呼叫以便釋放Load函式載入的資源。
 
下圖為整個Framework的時序圖: