專利名稱:用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種插件管理系統(tǒng)及方法,尤其涉及一種用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng)及方法。
背景技術(shù):
隨著計算機(jī)軟件技術(shù)的發(fā)展,越來越多的軟件用戶能夠使用一些簡單的編程工具(如腳本語言、VBA語言)來開發(fā)出適合自身要求的軟件功能模塊。因此,現(xiàn)今的軟件平臺開發(fā)中,一般都要求在產(chǎn)品中能夠提供讓用戶自行定制功能模塊的功能,以滿足用戶實際的需要,為用戶提供方便、快捷、簡單的二次開發(fā)的功能與形式。
目前,大部分的軟件產(chǎn)品所提供的二次開發(fā)平臺都是以控件(ActiveX)形式發(fā)布的,控件集成了平臺功能,以接口方法、屬性的形式提供給二次開發(fā)用戶。一般來說,控件開發(fā)能夠支持Windows下各類可視化編程語言,如Visual C++、Visual Basic、Borland Delphi。二次開發(fā)用戶可以根據(jù)自身開發(fā)水平選擇其中一種開發(fā)語言,基于控件功能設(shè)計開發(fā)應(yīng)用程序。在這種控件模式下,控件提供接口都是基于IDispatch,二次開發(fā)中可以利用接口提供的方法和屬性來實現(xiàn)應(yīng)用程序中某一功能。
控件技術(shù)在設(shè)計中有三個特點1、功能封裝性一個軟件平臺包含眾多的SDK(Software DevelopmentKit,軟件開發(fā)工具包),控件技術(shù)就是將這些SDK封裝起來,以簡單地接口方法、屬性開放給二次開發(fā)用戶,這種封裝性在具體項目中極大方便了項目應(yīng)用程序地簡單、快速完成。
2、事件響應(yīng)性控件技術(shù)包括了事件響應(yīng)機(jī)制,它能夠提供如數(shù)據(jù)加載、系統(tǒng)退出、鼠標(biāo)事件之類事件消息??丶录憫?yīng)性可以通知基于該控件開發(fā)的應(yīng)用程序某一過程或動作完成、取消、進(jìn)行等狀態(tài),應(yīng)用程序根據(jù)這些事件響應(yīng)采用一些必要的操作以完成相關(guān)動作。
3、功能有限性功能有限性表明控件中集成的SDK是一個有限集合。
上述最后一個特點說明了控件功能是有限的,二次開發(fā)中只能利用這些有限功能在項目應(yīng)用中完成一些基于這些有限功能的業(yè)務(wù)。因此,針對二次開發(fā)需求,目前的軟件產(chǎn)品平臺雖然幾乎都提供了二次開發(fā)的接口和方法,但控件只是功能的組合或封裝,也就是說在二次開發(fā)中所有開發(fā)的功能只是開發(fā)控件中功能的再次組合,而無法自定義模塊功能。
例如,如圖1所示,為現(xiàn)有控件功能對外提供時通過采用的模式示意圖。從圖1可以看出,控件對平臺功能進(jìn)行了封裝,二次開發(fā)出來的功能只是控件中包含功能的組合,其本質(zhì)不是一個用戶自定義開發(fā)的功能,如果在具體項目實施中,現(xiàn)場開發(fā)人員無法開發(fā)出控件中不具備的功能。
也就是說,如果現(xiàn)有控件只包含有功能1、功能2、功能3,那么在二次開發(fā)中所開發(fā)出來的模塊,其具有的所謂新功能1、2、3,只能是原有功能的組合,而無法開發(fā)出真正意義上的新功能。
然而,事實上,在用戶實際的二次開發(fā)中,往往要求根據(jù)自身的需要來開發(fā)出控件中所不具有的功能模塊,但現(xiàn)有軟件平臺的控件管理系統(tǒng)與方法極大地限制了這種自定義開發(fā)模式。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng)及方法,解決了應(yīng)用程序功能擴(kuò)充的限制問題,在二次開發(fā)中使用戶可以加載并使用根據(jù)自身需要而自定義的原有控件不具有的新功能模塊,將原有控件的有限功能集合擴(kuò)展為無限功能集合。
本發(fā)明提供一種用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng),包括封裝有內(nèi)部功能模塊的控件,還包括至少一個具有用戶自定義外部功能的插件;接口協(xié)議模塊,用以根據(jù)控件的標(biāo)準(zhǔn)接口,為所述插件提供通訊連接與事件響應(yīng)的接口協(xié)議;插件管理器,用以將所述至少一個插件組織起來供外部程序調(diào)用,該插件管理器包括插件加載模塊,用于將所述插件加載到所述控件中;插件鏈模塊,用于依序保存加載入控件的插件;插件查詢模塊,用于根據(jù)外部程序指令,查找保存入所述插件鏈模塊中的插件。
本發(fā)明進(jìn)而提供一種用于二次開發(fā)平臺的基于控件的插件管理方法,該方法包括如下步驟根據(jù)控件的標(biāo)準(zhǔn)接口,提供一個與所述控件的通訊連接與事件響應(yīng)相符合的接口協(xié)議;遵照所述接口協(xié)議,提供至少一個具有外部自定義功能的插件;在所述控件中維護(hù)一個插件鏈,當(dāng)應(yīng)用程序啟動時,由控件調(diào)用所述接口協(xié)議,將所述插件加載入插件鏈中。
本發(fā)明還進(jìn)一步包括如下步驟根據(jù)應(yīng)用程序的指令,由控件在所述插件鏈中查找已加載的插件,并返回應(yīng)用程序指定的插件的地址指針。
本發(fā)明為用戶提供了方便、快捷、簡單的二次開發(fā)形式,使用戶能夠使用簡單的語言就能夠定制自身需要的功能和模塊。通過本發(fā)明,用戶開發(fā)出來的系統(tǒng)功能能夠脫離系統(tǒng)平臺獨立運行,且具有自身的界面風(fēng)格,極大提高了控件在應(yīng)用項目中的實用性和靈活性。
圖1為現(xiàn)有控件功能對外提供時通過采用的模式示意圖;圖2為本發(fā)明的用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng)的實施例結(jié)構(gòu)示意圖;圖3為本發(fā)明所述的插件管理器2041的內(nèi)部結(jié)構(gòu)實施例示意圖;圖4為本發(fā)明所述的用于二次開發(fā)平臺的基于控件的插件管理模式實施例示意圖;
圖5為本發(fā)明所述的加載過程的實施例流程圖;圖6為本發(fā)明所述的查找并返回應(yīng)用程序指定的插件地址指針過程的
具體實施例方式
如圖2所示,為本發(fā)明的用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng)的實施例結(jié)構(gòu)示意圖,包括封裝有內(nèi)部功能模塊的控件201、一個用戶自定義功能插件202、一個接口協(xié)議模塊203,以及一個插件管理器204。
其中,所述接口協(xié)議模塊203,用以根據(jù)控件201的標(biāo)準(zhǔn)接口協(xié)議,為所述插件202提供通訊連接與事件響應(yīng)的接口協(xié)議;插件管理器204,用以將所述至少一個插件202組織起來供外部程序調(diào)用。
如圖3所示,為本發(fā)明所述的插件管理器2041的內(nèi)部結(jié)構(gòu)實施例示意圖,包括插件加載模塊2041,用于將所述插件加載到所述控件中;插件鏈模塊2042,用于依序保存加載入控件的插件;插件查詢模塊2043,用于根據(jù)外部程序指令,查找保存入所述插件鏈模塊中的插件。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)知道,本發(fā)明所述的各個模塊,例如插件管理器204,既可以統(tǒng)一設(shè)計位于控件201之中,也可以獨立存在。
通過所述接口協(xié)議模塊203提供的接口協(xié)議,所述插件202的接口定義符合所述控件201的標(biāo)準(zhǔn)接口定義。
所述協(xié)議接口模塊203,包括連接協(xié)議單元與事件協(xié)議單元。其中,連接協(xié)議單元,用以提供插件中的功能定義、事件定義以及通知控件加載,包括插件加載入口單元,用以說明插件的功能、加載事件定義,并通知控件做聯(lián)橋;插件卸載入口單元,用以通知控件斷開聯(lián)橋,卸載事件定義;及插件退出入口單元,用以通知控件有插件開始退出并釋放該插件所占用的內(nèi)存控件。事件協(xié)議單元,用以提供用戶與系統(tǒng)的交互操作,提供的事件包括應(yīng)用程序事件、文檔事件、視口事件、場景事件等。
從圖2、圖3可以看出,二次開發(fā)用戶開發(fā)的新功能插件202,通過本發(fā)明的接口協(xié)議模塊203加入到控件201中,以此來彌補(bǔ)控件功能有限性所帶來的不足,同時,控件201還保持了原有的模塊功能,用戶可以利用控件提供的方法和屬性,重新組合或直接使用控件中的功能模塊,以達(dá)到功能的最大化。
如圖4所示,為本發(fā)明所述的用于二次開發(fā)平臺的基于控件的插件管理模式實施例示意圖,首先,根據(jù)控件的標(biāo)準(zhǔn)接口,提供一個與所述控件的通訊連接與事件響應(yīng)相符合的接口協(xié)議(步驟401);遵照所述接口協(xié)議,提供至少一個具有外部自定義功能的插件(步驟402);在所述控件中維護(hù)一個插件鏈,當(dāng)應(yīng)用程序啟動時,由控件調(diào)用所述接口協(xié)議,將所述插件加載入插件鏈中;(步驟403);根據(jù)應(yīng)用程序的指令,由控件在所述插件鏈中查找已加載的插件,并返回應(yīng)用程序指定的插件的地址指針(步驟404)。
此外,當(dāng)應(yīng)用程序退出時,本發(fā)明還可以調(diào)用所述接口協(xié)議,由控件將已經(jīng)加載的插件卸載,并釋放由所述加載插件所占用的內(nèi)存。
本發(fā)明所述的接口協(xié)議,可以是基于COM(Component Object Model,組件對象模型)開發(fā)的,控件則是將平臺中已有的功能模塊封裝起來以提供出來做二次開發(fā)。所述控件可以利用ATL(Active Template Library,活動模板庫)技術(shù)實現(xiàn)COM,以及通過COM粘合插件到控件中,利用ATL技術(shù)的控件可以遵守COM標(biāo)準(zhǔn),在各種開發(fā)語言平臺上開發(fā)使用。要實現(xiàn)插件加載到控件中,這些插件需要遵守標(biāo)準(zhǔn)的所述控件標(biāo)準(zhǔn)接口方法和事件定義,該協(xié)議主要包括連接協(xié)議與事件協(xié)議連接協(xié)議連接協(xié)議是插件加載中的初始化協(xié)議,完成插件中功能定義、事件定義以及通知控件加載。具體方法可以如下OnConnection,插件加載入口,通過該方法可以說明插件的功能、加載事件定義,并通知控件做聯(lián)橋。
OnDisconnection,插件卸載入口,通過該方法可以通知控件斷開聯(lián)橋,卸載事件定義。
OnBeginShutdown,插件退出入口,通過該接口可以告知控件本插件開始退出并釋放本插件所占用的內(nèi)存控件。
事件協(xié)議事件是應(yīng)用程序交換操作一個重要功能,由控件創(chuàng)建了事件協(xié)議,通過該協(xié)議可以實現(xiàn)用戶與系統(tǒng)交互操作,如鼠標(biāo)消息相應(yīng)、鍵盤消息響應(yīng)。所述控件主要有以下幾類事件應(yīng)用程序事件,應(yīng)用程序事件由由應(yīng)用程序?qū)ο笠l(fā)。當(dāng)用戶啟動,關(guān)閉應(yīng)用程序,新建文檔,視口時可引發(fā)事件。文檔事件,文檔事件由文檔對象引發(fā)。當(dāng)文檔關(guān)閉或打開時可引發(fā)事件。視口事件,視口事件由視口對象引發(fā)。這類事件主要用于處理窗口消息。場景事件,當(dāng)場景發(fā)生改變時事件引發(fā)。此外,還可以支持其他對象事件。
本發(fā)明的插件接口協(xié)議是控件與應(yīng)用程序插件之間的橋梁,在應(yīng)用程序開發(fā)中,可以利用一些簡單的開發(fā)語言基于插件協(xié)議開發(fā)出具有新功能的插件模塊,然后將這些開發(fā)出來具有新功能的插件模塊在應(yīng)用系統(tǒng)啟動時加載到控件中,這樣在系統(tǒng)運行時可以根據(jù)需要隨時使用到這些插件中的功能。協(xié)議內(nèi)容包括了插件通知控件聯(lián)橋、事件通知相應(yīng)的內(nèi)容。
本發(fā)明可以在控件內(nèi)部維護(hù)一個插件鏈,在基于控件開發(fā)的應(yīng)用程序啟動之時,可以將加載的插件模塊保存在該插件鏈中。根據(jù)加載插件協(xié)議編寫完成插件功能可以通過控件的AddPlugin方法加載該插件,參數(shù)可以為插件的GUID(全球唯一識別碼)字符串,也可以是插件名稱。
如圖5所示,為本發(fā)明所述的加載方法實施例流程圖,首先,根據(jù)所述加載插件的參數(shù)名,獲取與其相對應(yīng)的插件CLSID號(步驟501);根據(jù)所述獲取的CLSID數(shù)值,創(chuàng)建該插件對象(步驟502);然后判斷創(chuàng)建插件對象是否成功(步驟503),如果否,則失敗返回(步驟505);如果創(chuàng)建成功,則調(diào)用所述接口協(xié)議的插件加載入口協(xié)議,將加載的插件保存入插件鏈中,并同時記錄該插件所對應(yīng)的CLSID數(shù)值(步驟504)。
加載到控件中的插件在應(yīng)用程序運行過程中要隨時提供給應(yīng)用程序使用,使用時,由控件取得指定插件的屬性,屬性傳入的參數(shù)可以為GULD字符串或者插件名稱,然后查找后返回給應(yīng)用程序。如圖6所示,為本發(fā)明所述的查找并返回應(yīng)用程序指定的插件方法實施例流程圖,首先,要識別傳入的插件名稱或ID字符串是否正確(步驟601);根據(jù)該參數(shù)獲得相對應(yīng)的插件的CLSID號(步驟602);根據(jù)該CLSID數(shù)值,從插件鏈中查找具有相同CLSID號的插件(步驟603);然后判斷是否查找成功(步驟604),如果沒有找到,則返回空(步驟606);否則,返回查找出來的插件的地址指針(步驟605)。
本發(fā)明所述控件中的插件模塊可以在Visual C++、Visual Basic、BorlandDelphi語言平臺上,二次開發(fā)用戶可以根據(jù)實際需要選擇一種熟悉、快捷、簡單語言來開發(fā)插件模塊,開發(fā)起來比較容易。在實際的軟件應(yīng)用中,不同用戶有不同要求,利用本發(fā)明所述的基于控件的插件管理技術(shù),可以以不變應(yīng)萬變,即保留了控件應(yīng)有的功能組合,又為用戶在二次開發(fā)中提供了很好的擴(kuò)展平臺。
權(quán)利要求
1.一種用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng),包括封裝有內(nèi)部功能模塊的控件,其特征在于,還包括至少一個具有用戶自定義外部功能的插件;接口協(xié)議模塊,用以根據(jù)控件的標(biāo)準(zhǔn)接口,為所述插件提供通訊連接與事件響應(yīng)的接口協(xié)議;插件管理器,用以將所述至少一個插件組織起來供外部程序調(diào)用,該插件管理器包括插件加載模塊,用于將所述插件加載到所述控件中;插件鏈模塊,用于依序保存加載入控件的插件;插件查詢模塊,用于根據(jù)外部程序指令,查找保存入所述插件鏈模塊中的插件。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述插件管理器,位于所述控件之中。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,通過所述接口協(xié)議模塊提供的接口協(xié)議,所述插件的接口定義符合所述控件的標(biāo)準(zhǔn)接口定義。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述協(xié)議接口模塊,包括連接協(xié)議單元,用以提供插件中的功能定義、事件定義以及通知控件加載,包括插件加載入口單元,用以說明插件的功能、加載事件定義,并通知控件做聯(lián)橋;插件卸載入口單元,用以通知控件斷開聯(lián)橋,卸載事件定義;及插件退出入口單元,用以通知控件有插件開始退出并釋放該插件所占用的內(nèi)存控件;及事件協(xié)議單元,用以提供用戶與系統(tǒng)的交互操作,提供的事件包括應(yīng)用程序事件、文檔事件、視口事件、場景事件。
5.一種用于二次開發(fā)平臺的基于控件的插件管理方法,其特征在于,該方法包括如下步驟根據(jù)控件的標(biāo)準(zhǔn)接口,提供一個與所述控件的通訊連接與事件響應(yīng)相符合的接口協(xié)議;遵照所述接口協(xié)議,提供至少一個具有外部自定義功能的插件;在所述控件中維護(hù)一個插件鏈,當(dāng)應(yīng)用程序啟動時,由控件調(diào)用所述接口協(xié)議,將所述插件加載入插件鏈中。
6.如權(quán)利要求5所述的方法,其特征在于,還進(jìn)一步包括如下步驟根據(jù)應(yīng)用程序的指令,由控件在所述插件鏈中查找已加載的插件,并返回應(yīng)用程序指定的插件的地址指針。
7.如權(quán)利要求5所述的方法,其特征在于,還進(jìn)一步包括如下步驟應(yīng)用程序退出時,調(diào)用所述接口協(xié)議,由控件將已經(jīng)加載的插件卸載,并釋放由所述加載插件所占用的內(nèi)存。
8.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述插件的接口協(xié)議,包括連接協(xié)議,用以提供插件中的功能定義、事件定義以及通知控件加載,包括插件加載入口協(xié)議,用以說明插件的功能、加載事件定義,并通知控件做聯(lián)橋;插件卸載入口協(xié)議,用以通知控件斷開聯(lián)橋,卸載事件定義;及插件退出入口協(xié)議,用以通知控件有插件開始退出并釋放該插件所占用的內(nèi)存控件;及事件協(xié)議,用以提供用戶與系統(tǒng)的交互操作,提供的事件包括應(yīng)用程序事件、文檔事件、視口事件、場景事件。
9.如權(quán)利要求5所述的方法,其特征在于,所述加載插件步驟,包括如下步驟根據(jù)所述插件的參數(shù),獲取與其相對應(yīng)的插件CLSID號,其中所述參數(shù)為該被加載插件的GUID字符串,或該插件的名稱;根據(jù)所述獲取的CLSID數(shù)值,創(chuàng)建該插件對象;調(diào)用所述接口協(xié)議,將插件保存入插件鏈中,并保存該插件所對應(yīng)的CLSID數(shù)值。
10.如權(quán)利要求6所述的方法,其特征在于,所述的查找并返回應(yīng)用程序指定的插件地址指針步驟,包括如下步驟識別傳入的插件參數(shù)的正確性,其中所述參數(shù)為指定插件的GUID字符串,或該插件的名稱;根據(jù)參數(shù)獲得相對應(yīng)的插件的CLSID號;根據(jù)該CLSID數(shù)值,從插件鏈中查找具有相同CLSID號的插件;返回查找出來的插件的地址指針。
全文摘要
本發(fā)明提供一種用于二次開發(fā)平臺的基于控件的插件管理系統(tǒng)及方法,包括封裝有內(nèi)部功能模塊的控件、至少一個具有用戶自定義外部功能的插件、接口協(xié)議模塊,以及插件管理器,所述插件管理器包括插件加載模塊、插件鏈模塊,插件查詢模塊,本發(fā)明首先根據(jù)控件的標(biāo)準(zhǔn)接口,提供一個與所述控件的通訊連接與事件響應(yīng)相符合的接口協(xié)議;然后遵照所述接口協(xié)議,提供至少一個具有外部自定義功能的插件;在所述控件中維護(hù)有一個插件鏈,當(dāng)應(yīng)用程序啟動時,由控件調(diào)用所述接口協(xié)議,將所述插件加載入插件鏈中。本發(fā)明使用戶在二次開發(fā)過程中,可以根據(jù)自身需要而加載并使用原有控件所不具有的新功能。
文檔編號G06F9/44GK1924800SQ200510098550
公開日2007年3月7日 申請日期2005年9月2日 優(yōu)先權(quán)日2005年9月2日
發(fā)明者孫慶文 申請人:北京靈圖軟件技術(shù)有限公司