?? 1174.txt
字號(hào):
日月光華 -- Internet精華區(qū)文章閱讀
--------------------------------------------------------------------------------
發(fā)信人: srcap (垃圾), 信區(qū): Internet
標(biāo) 題: 《 軟件中的插件技術(shù) 》
發(fā)信站: 日月光華站 (Fri Apr 30 11:59:30 1999) , 轉(zhuǎn)信
插件概述
插件的本質(zhì)是在不修改程序主體的情況下對(duì)軟件功能進(jìn)行加強(qiáng),當(dāng)插件的接口
被公開(kāi)時(shí),任何公司或個(gè)人都可以自己制作插件來(lái)解決一些操作上的不便或增加一
些功能。比如我手頭正在寫(xiě)的最新版本ENCounter,允許其他的軟件接駁進(jìn)來(lái),駐
留的程序可以只是ENCounter一個(gè),但是當(dāng)聯(lián)網(wǎng)成功時(shí),ENCounter可以除了記費(fèi)
外,還能呼叫其他的插件模塊來(lái)執(zhí)行諸如檢查郵件等操作,這樣比駐留一個(gè)
ENCounter郵件檢查軟件更有效。
使用插件的軟件中最成功的莫過(guò)于PhotoShop了。使用過(guò)PhotoShop的人對(duì)濾
鏡一定不陌生。即使是初涉圖形制作的生手,只要去獲取一些好的濾鏡,也能夠輕
易地作出特殊效果。另一套著名的使用插件機(jī)制的軟件是WinAmp,WinAmp早期的
成功雖然在于其快速的解碼引擎,但在MP3播放器中能夠保持長(zhǎng)久的霸主地位,也
正是由于內(nèi)置了健全的Skin和PlugIn(插件)。細(xì)心的朋友一定注意到了,后期的
WinAmp中增加的MIDI、MOD、WAVE等音樂(lè)格式的播放功能完全是靠插件實(shí)現(xiàn)的。
插件還可以支持多人合作開(kāi)發(fā),只要有一個(gè)好的插件機(jī)制,不同的功能可以由
不同的人來(lái)完成,而且由于不同插件之間互不影響,方便程序的調(diào)試和糾錯(cuò)。
插件類(lèi)型
從廣義的范圍來(lái)看,插件有以下三種類(lèi)型:
1. 類(lèi)似批命令的簡(jiǎn)單插件。事實(shí)上這種插件的自由度非常低。使用這種方法
的軟件有Win Hacker等,運(yùn)行這種插件后,會(huì)一步步要求用戶進(jìn)行選擇/輸入,最
后根據(jù)用戶的輸入來(lái)執(zhí)行一系列事先定義好的操作。這種插件一般是文本文件。功
能比較單一,可擴(kuò)展性極小。優(yōu)點(diǎn)是插件做起來(lái)非常方便,即使是對(duì)程序設(shè)計(jì)了解
不多的人也可以制作。如WinAmp的Skin。
2. 使用一種特殊的腳本語(yǔ)言來(lái)實(shí)現(xiàn)的插件(暫時(shí)稱(chēng)為腳本插件)。這種插件比
較難寫(xiě),需要軟件開(kāi)發(fā)者自己制作一個(gè)程序解釋內(nèi)核。比如微軟惹了很多麻煩的宏
就是這種類(lèi)型的。有一套著名的Office輔助工具就是完全用Office內(nèi)置的
VBScript寫(xiě)成的。這種方法的優(yōu)點(diǎn)在于無(wú)需使用其它工具來(lái)制作插件,軟件本身
就可以實(shí)現(xiàn),普遍出現(xiàn)于各種辦公自動(dòng)化軟件中。
3. 利用已有的程序開(kāi)發(fā)環(huán)境來(lái)制作插件。例如PhotoShop等軟件使用的方法。
使用這種方法的軟件在程序主體中建立了多個(gè)自定義的接口,使插件能夠自由訪問(wèn)
程序中的各種資源。這種插件的優(yōu)勢(shì)在于自由度極大,可以無(wú)限發(fā)揮插件開(kāi)發(fā)者的
創(chuàng)意,這種插件是狹義范圍的插件,也是真正意義上的插件。而這種插件機(jī)制的編
寫(xiě)相對(duì)復(fù)雜,對(duì)于插件接口之間的協(xié)調(diào)比較困難,插件的開(kāi)發(fā)也需要專(zhuān)業(yè)的程序員
才能進(jìn)行。
插件實(shí)例
網(wǎng)頁(yè)作坊(HTML SHOP)是我國(guó)第一個(gè)使用插件機(jī)制的共享軟件。
以下我們將以HTML SHOP為例子,來(lái)深入了解插件機(jī)制的開(kāi)發(fā):
在軟件中添加插件機(jī)制,首先需要進(jìn)行詳細(xì)的應(yīng)用分析,確定應(yīng)該提供哪些資
源給插件開(kāi)發(fā)者使用。HTML SHOP作為一個(gè)網(wǎng)頁(yè)編輯器,對(duì)網(wǎng)頁(yè)的編輯是建立在“計(jì)
劃”的基礎(chǔ)上的,因此,我們必須提供給插件開(kāi)發(fā)者訪問(wèn)當(dāng)前打開(kāi)計(jì)劃信息的能力,
能夠自由地讀取和寫(xiě)入的能力。
為了讓插件提供的功能能夠被用戶方便調(diào)用,必須將主菜單的控制權(quán)與插件開(kāi)
發(fā)者共享,而網(wǎng)頁(yè)作坊的程序界面模仿了經(jīng)典軟件開(kāi)發(fā)環(huán)境Delphi 3.0,因此我
們同時(shí)將工具條中的標(biāo)簽頁(yè)組的權(quán)利提供給插件開(kāi)發(fā)者。這個(gè)應(yīng)用分析部分是插件
機(jī)制開(kāi)發(fā)的重頭,是最難把握的部分,如果提供出來(lái)的權(quán)利太大,寫(xiě)得拙劣的插件
發(fā)生錯(cuò)誤時(shí)可能威脅到主程序,如果提供出來(lái)的權(quán)利太小,又限制了插件開(kāi)發(fā)者的
想象力。
在編程方面包括了兩個(gè)部分,一部分是主體程序的插件處理機(jī)制,用來(lái)進(jìn)行初
始化每個(gè)插件的過(guò)程,并且管理好每個(gè)插件接口,在插件訪問(wèn)時(shí)能夠做出正確的反
饋。另一部分是插件的接口函數(shù)定義,將所有的插件接口函數(shù)進(jìn)行封裝,以便開(kāi)發(fā)
者自由調(diào)用。在HTML SHOP中,這部分的封裝文件是HBPlugin.pas,當(dāng)開(kāi)發(fā)者在
程序中引用了該文件時(shí),就可以直接調(diào)用其中的TOOLHOST對(duì)象,使用封裝于該對(duì)
象的插件接口函數(shù)。
而最重要的部分當(dāng)然是插件和主程序之間的通訊了。在網(wǎng)頁(yè)作坊中的插件其實(shí)
是一個(gè)遵循了某些特定規(guī)則的DLL,而主程序?qū)⑺胁寮涌谠趦?nèi)存中的地址傳遞
給插件,插件則根據(jù)這些地址來(lái)呼叫插件接口完成所需功能、獲取所需資源等。
--
I love:
games programming
and that others consider me as a pile of garbage
※ 來(lái)源:·日月光華站 bbs.fudan.edu.cn·[FROM: 10.13.21.21]
--------------------------------------------------------------------------------
[返回上一頁(yè)] [本討論區(qū)]
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -