WorldWind插件機(jī)制總結(jié)_第1頁
WorldWind插件機(jī)制總結(jié)_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余4頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、插件機(jī)制總結(jié)共分四個部分:. .插件機(jī)制概述:插件的運(yùn)行特點(diǎn). .插件書寫格式:插件源文件和類的書寫. .相關(guān)類說明:插件鏈接和插件管理. .相關(guān)類概述:插件應(yīng)用類的開發(fā)平臺一、插件機(jī)制概述. .特點(diǎn)插件機(jī)制支持多種語言的插件形式,并有較高的運(yùn)行效率。添加插件有兩種方式:外部插件在項(xiàng)目輸出的文件夾中直接添加插件源文件或編譯好的程序集。()()程序初始化和運(yùn)行中動態(tài)的編譯執(zhí)行由,完成的源文件,在框架內(nèi)編譯完成,不需要第三方的鏈接庫。()()也可以從預(yù)編譯好的文件加載插件。對腳本語言的快速編譯,在加載時 編譯運(yùn)行,和內(nèi)部代碼有相同的運(yùn)行效率。內(nèi)部插件在項(xiàng)目中添加插件文件代碼。在項(xiàng)目生成的時候直接編

2、譯到程序集當(dāng)中。插件機(jī)制也有一些缺點(diǎn):安全性,即外部腳本文件中的不安全或惡意的代碼。但調(diào)試人員可以通過源文件查看。缺少不同版本的插件開發(fā)平臺。 插件的書寫要與主程序集的版本兼容。插件機(jī)制借鑒版本中的插件機(jī)制,與版本中的插件不兼容。. .運(yùn)行機(jī)制主程序調(diào)用搜索 目錄及其子目錄,將插件文件( (包含格式) )讀入內(nèi)存,如果需要編譯則進(jìn)行編 譯;然后查找已編譯的程序集。 每當(dāng)確定插件類型,添加插件信息類列表, 最后加載運(yùn)行插 件。在運(yùn)行過程中可以用插件管理器來管理插件。查找過程如下:()() ()() ();();鏈接實(shí)現(xiàn)部分: 構(gòu)造函數(shù)創(chuàng)建實(shí)例(,);(,);查找程序集內(nèi)部的的插件類();();查

3、找外部插件類,在文件夾中();();加載插件();();插件相關(guān)類的關(guān)系圖:. .插件的信息頭在源文件開頭以下格式書寫插件信息,這些信息可以被類讀取。 頭信息是可選的,并推薦使用。例如::,:, , , ()() 11111111. .編寫源文件一般插件類的包含兩個部分,即兩個類:插件加載類()()和應(yīng)用類(功能實(shí)現(xiàn)類)。第一個是插件加載類:繼承插件基類,相當(dāng)于應(yīng)用類的容器。主要從載了兩個方法,()()代碼將在插件被加載的時候執(zhí)行,并完成與主進(jìn)程的傳遞參數(shù),或添加渲染目標(biāo),或啟動監(jiān)聽(配合監(jiān)聽處理程序完成插件初始化 )。()()卸載插件。是加載的逆向過程。第二個類是應(yīng)用類,即具體實(shí)現(xiàn)功能的類,

4、作為插件類的成員使用。一般使用到主啟動項(xiàng)目()()、插件開發(fā)項(xiàng)目()()等項(xiàng)目中的類及參數(shù)。對于比較復(fù)雜的插件可以包含更多的類型。以為例此例中()是從插件基類繼承的成員參數(shù),作為傳遞的參數(shù);并添加實(shí)例為渲染目標(biāo)。另外,應(yīng)用類繼承于,實(shí)現(xiàn)渲染功能,由插件加載類添加到渲染物列表。 ()() ();();();(); .5 5():():(”,,),) ; ; ()() 現(xiàn)在時間”();();(,);(,);(,);(,); 三、插件機(jī)制相關(guān)類及說明插件的運(yùn)行機(jī)制主要有兩個部分組成: 插件運(yùn)行相關(guān),插件管理相關(guān), . .插件運(yùn)行關(guān)鍵類插件基類:抽象類,所有插件(加載)類的基類, 由鏈接屬性:()()

5、和指向主應(yīng)用程序類的句柄:這兩個屬性一般作 為參數(shù)傳遞給插件子類 (插件加載類),傳遞的 方式是虛繼承的方式,這是主應(yīng)用程序和插件class PluginEnginePlugin#m_Application: MainApplication#m_isLoaded: bool#m_PluginDirectory: string+ Load() : void+ PluginLoad(MainApplication, string) : void+ PluginUnload() : void+ Unload() : void?property?+ Application() : MainApplic

6、ation+ IsLoaded() : bool+ ParentApplication() : MainApplication+ PluginDirectory() : string用程序構(gòu)造塊完成源代碼的生成; 添加相關(guān)聯(lián)的程序集,包括系統(tǒng)框架 的程序集和程序生成的程序集。構(gòu)造函數(shù):(,)(,)初始化實(shí)例,完成參數(shù)傳遞。 屬性和字段:()()和(),()(),()插件列表。 方法:()()在以編譯的內(nèi)部程序集中( (程序集) )類信息傳遞的紐帶。 和在使用上是等價的, 但多使用后者以避免一些命名沖突。方法:()()加載插件類的入口, 子類必須重寫該方法。程序運(yùn)行中實(shí)際上是由插件基類 方法,但

7、具體的實(shí)現(xiàn)就由子類來完成。()來調(diào)用( (虛) )(,)(,)加載插件的方法,這個方法不需要重寫,可以由插件類直接調(diào)用(最終也將調(diào)用 這個方法類似一個保護(hù)機(jī)制,()()方法)(繼承的方法)來加載插件,而且比較方便安全。 . .在運(yùn)行過程中(而不只是初始化時)插件加載和卸載。. .子類可以直接使用插件信息類:存儲插件的信息及插件的實(shí)例, 由直接創(chuàng)建實(shí)例。它只表示插件的外部信息,與插件的功能和實(shí) 現(xiàn)沒有關(guān)系。比如,插件的實(shí)例,插件( (由讀取文件名稱得 到) ),名稱、描述、開發(fā)者、站點(diǎn)、相關(guān)說明 些是由類讀取源文件的頭信息得到 ) ),初始化加( (這class Plugi nEnginePlu

8、gi nlnfom_description: stringm_developer: stri ngm_fullPath: stri ngm_n ame: stringm_plugi n: Plugi nm_referen ces: stri ngm_webSite: string載信息等。使用,為任一頭信息的屬性進(jìn)行賦值的時候均 會將其他的屬性同時賦值。屬性:獲取和設(shè)置是否在程序初始化的時候加載 插件。插件的實(shí)例。表示插件子類。插件鏈接類:加載插件腳本,鏈接, 并執(zhí)行,它是鏈接主應(yīng)用程序和插 件類鏈接的媒介。完成的功能主要有:添加( (不同語言 代碼的) )編譯器,使支持不同語言編 寫的插件;

9、使用 創(chuàng)建和檢索代碼生 成器和代碼編譯器的實(shí)例,使用應(yīng)FindTaglnLine(string, string, string*) : void- ReadMetaData() :void ?property?+Descripti on() : stri ngDeveloper。: stri ngFullPath() : stri ngID() : stri ngIsCurre ntlyLoaded() : boolIsLoadedAtStartupO : boolName。: stri ngPlugi n() : Plug inRefere nces() : stri ngWebSite()

10、 : stri ngclass PluginEngine /PluginCompilercodeDomProviders: Hashtable = new Hashtable()cp: CompilerParameters = new CompilerPar.LogCategory: string = PLUG m_pluginRootDirectory: stringm_plugins: ArrayList = new ArrayList()m_worldWindReferencesList: StringCollection = new StringColle.worldWind: Mai

11、nApplicationAddCodeProvider(CodeDomProvider) : voidAddCompilerReference(string, string) : voidAddPlugin(string) : voidCompile(PluginInfo, CodeDomProvider) : AssemblyDispose() : voidFindPlugins(Assembly) : void FindPlugins() : voidGetPluginlnterface(Assembly) : PluginHasCompiler(string) : bool IsPreC

12、ompiled(string) :boolLoad(PluginInfo) : void LoadStartupPlugins() : voidPluginCompiler(MainApplication, string)Uninstall(PluginInfo) : voidUnload(PluginInfo) : void ?property?+ PluginRootDirectory() : string+ Plugins() : ArrayList查找插件 ; ; 通過特定類型(類的,公共的,插件類 )查找程序集插件類,并創(chuàng)建實(shí)例,添 加入列表。()()查找文件夾中的插件, 并添加到 列表 ; ; 使用擴(kuò)展名來確定是否存在這種文件類型的編譯器 或者是不是已經(jīng)編譯好的 程序集。注:支持種文件類型的編譯( , , , , )和一種文件的連接() , , 查找插件主要是為了添加插件列 表(賦予插件信息),具體實(shí)現(xiàn)插件在中完成。()() 加載插件:加載列表中的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論