基於MFC的外掛程式應用程式設計與實現

2021-09-30 07:05:20 字數 2846 閱讀 9394

摘  要討論了外掛程式應用系統的基礎理論及應用優勢,據此設計了基本的外掛程式應用系統框架模組並通過mfc基礎平台予以具體實現。

關鍵字

外掛程式;動態鏈結庫;mfc

軟體開發手段的演化,就在於以最小的代價得到更健壯且易於擴充套件和維護的「好」的應用系統,開發工具的持續改進和開發思想的進化使得我們有可能實現上述目標。

從面向過程的開發至物件導向的程式設計,直至目前面向元件的開發,正是上述思維的展現。基於外掛程式的應用系統從體系結構設計出發,著力構建低耦合的,靈活可擴充套件的且支援無編譯熱插拔的應用系統,通過分析應用需求,提**能相似的模組並設計相應的模組間介面,我們就可以將該部分功能分離出來,綜合來看,基於外掛程式的應用系統有以下優勢:

(1)實現真正意義上的軟體元件的「即插即用」。

(2)在二進位制級上整合軟體, 減少大量的軟體重新編譯與發布所帶來的麻煩。

(3)能夠很好地實現軟體模組的分工開發, 並且能夠大量吸取他人的優點。

(4)可以較好地實

現**隱藏, 保護智財權。

基於外掛程式的體系結構如圖1所示。

圖1  外掛程式應用系統體系結構

從圖1可知,乙個完成的基於外掛程式的應用系統共分兩部分:外掛程式主控程式(含外掛程式排程核心模組)以及外掛程式池(存放所有外掛程式)。主控程式通過核心模組提供外掛程式管理功能,主要包括:

(2)啟用及禁用外掛程式:主控程式可以根據使用者指令,對某些已裝載的外掛程式予以啟用或禁用。

(4)配置外掛程式引數:外掛程式本身的執行需要對某些引數進行定製。

根據模組規劃,外掛程式實現特定的功能並將介面暴露出來,根據需要,可能還需要呼叫主控程式提供的方法以操作資源或資料。

據上述討論,我們設計乙個基本的外掛程式應用系統框架,其中主控程式是基於mfc對話方塊的應用程式,外掛程式使用動態庫實現,外掛程式管理部分使用專門的cpluginmanager類實現,其實現的函式如圖2所示。

圖2  外掛程式管理類檢視

就主要函式說明如表1所示。

表1  外掛程式管理類提供的函式

函式名稱

函式說明

init

初始化,搜尋所有有效外掛程式

shutdown

釋放資源

getall

得到所有外掛程式名,用cstring物件返回,名之間用:隔開

count

返回可用外掛程式的個數

run

呼叫外掛程式提供的函式介面

load

載入所有外掛程式

unload

解除安裝所有外掛程式

extractfilepath

提取外掛程式存放路徑

以load函式為例,我們使用stl的map資料結構存放外掛程式控制代碼和外掛程式的對應,**如下:

void cpluginmanager::load()

else if(null == getprocaddress(hm , "pluginmain"))

else          _dllmap.insert(make_pair(finder.getfilename() , hm));}}

外掛程式提供的介面函式如下(僅作為示例,如需其它介面,可照此新增):

#ifdef plug1_exports

#define plug_api __declspec(dllexport)

#else

#define plug_api __declspec(dllimport)

#endif

plug_api void          pluginmain(void)

主控程式使用樹控制項展示外掛程式功能,程式初始化時首先呼叫初始化函式完成控制項註冊,然後得到所有控制項的名稱並以葉節點的形式顯示出來,使用者雙擊相應的葉節點時,主控程式呼叫外掛程式提供的函式pluginmain,呼叫過程如下:

void ctreectrldlg::ondblclktree(nmhdr* pnmhdr, lresult* presult)

主控程式執行時及雙擊樹形圖葉節點時介面,如圖3所示。

圖3  主控程式執行介面

主控程式所在路徑下建立plugin目錄,並存放三個外掛程式檔案。

開放的元件化體系結構模組組成清晰,同時也方便了系統擴充套件和後續維護,本文從外掛程式應用系統的體系結構入手,設計了主控模組與外掛程式池的功能要求,給出了外掛程式管理類實現的功能,並基於mfc給出了相應的具體實現,需要說明的是:

(1)外掛程式應用系統涉及到主控程式和外掛程式之間的雙向互動,外掛程式也可以利用主控程式提供的介面訪問公共資源和資料,本文對該部分功能未作實現。

(2)真正的應用系統由於外掛程式眾多,不可避免的涉及到外掛程式之間的協同和衝突檢測,需要在結構設計上解決。

(3)外掛程式的實現方式較多,可以根據具體的應用需求和系統規模選用比較合適的一種。

總的來看,基於元件的外掛程式應用系統,由於存在諸多優勢,必將帶來更多的應用前景和使用者體驗。

[1]  彭永康,章義來,外掛程式及其介面的研究與應用,

計算機應用,2003,6:122~123

[2]  於珊珊,軟體外掛程式技術及其應用研究,電腦學習,2007,8:55~56

IAP 應用程式設計

1 檢查是否需要對第二部分 進行更新 2 如果不需要更新則轉到4 3 執行更新操作 4 跳轉到第二部分 執行 第一部分 必須通過其它手段,如jtag或isp燒入 第二部分 可以使用第一部分 iap功能燒入,也可以和第一部分 一道燒入,以後需要程式更新是再通過第一部分iap 更新。對於stm32來說,...

串列埠應用程式設計

include include 標準輸入輸出定義 include 標準函式庫定義 include unix 標準函式定義 include include include 檔案控制定義 include ppsix 終端控制定義 include 錯誤號定義 include include include...

使用Flex進行基於模板的應用程式設計

富 internet 應用程式的布局和設計過程經常脫離實際的應用程式開發本身。每個新的應用程式都要從頭開發應用程式布局或者由設計人員獨自生成布局。儘管對很多應用程式來說,生成一流的設計是必要的,但是這樣將使開發過程更耗費時間和成本。有很多概念可以彌補這種不足,而 flex 4 gumbo 有望在此方...