COM組件探究與接口實(shí)現(xiàn)_第1頁
COM組件探究與接口實(shí)現(xiàn)_第2頁
COM組件探究與接口實(shí)現(xiàn)_第3頁
COM組件探究與接口實(shí)現(xiàn)_第4頁
COM組件探究與接口實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、com組件探究與接口實(shí)現(xiàn)摘要:在com組件模型屮,接口是最為重要的概念,在整個(gè)應(yīng)用 系統(tǒng)中起決定性作用,外界和組件方所有的交互都通過接口實(shí)現(xiàn), 因此接口設(shè)計(jì)的優(yōu)劣直接影響組件的質(zhì)量。接口是一組方法的集 合,其方法也稱為接口成員函數(shù)。com組件為com對(duì)象提供活動(dòng)空 間,com對(duì)象以com接口的方式提供服務(wù)。在com屮接口就是一切, 對(duì)于客戶來說,一個(gè)組件就是一個(gè)接口集,客戶只要知道接口就可 以對(duì)組件進(jìn)行操作了。隨著com技術(shù)的不斷完善,com技術(shù)將得到 更廣泛的應(yīng)用。關(guān)鍵詞:com組件;com接口; iunknowncom components study and interface real

2、izationyang fcngmci(ningxia yinchuan evening news, yinchuan 750004, china)abstract:the com component model, the interface is the most important concepts in the entire application system play a decisive role in the outside wor1d and interact with the component side through all of the interface, the i

3、nterface design will directly affect the quality of components interface is a collection of methods,the method is also known as the interface member functions com components to provide space for the com objects, com objects to com interface approach to service delivery in com, the interface is every

4、thing,for customers, a component is a set of interfaces, customers can know the interfaces of the components can operate as technology continues to improve com, com technology will be more widely usedkeywords:com components:com interface;iunknown一、引言com是一個(gè)可以用于構(gòu)造軟件組件的模型,它由微軟提出并發(fā)布, 在數(shù)十年的時(shí)間內(nèi)不斷成長,到目前為止,

5、com技術(shù)已經(jīng)和java bean、corba 起被并稱為組件開發(fā)的三大標(biāo)準(zhǔn)。com具有構(gòu)件開 發(fā)語言的無關(guān)性、跨平臺(tái)性、構(gòu)件運(yùn)行位置和進(jìn)程透明性、組件配 置靈活性和運(yùn)行安全性等特性,而且它有流行的開發(fā)環(huán)境支持(如 vc、vb> dclphi等),對(duì)比其他組件技術(shù),com開發(fā)過程簡(jiǎn)單,容 易入手,這些因素使得com成為當(dāng)前廣受歡迎的組件開發(fā)技術(shù)之一。 在com組件模型中,接口是最為重要的概念,在整個(gè)應(yīng)用系統(tǒng)中起 決定性作用,外界和組件方所有的交互都通過接口實(shí)現(xiàn),因此接口 設(shè)計(jì)的優(yōu)劣直接影響組件的質(zhì)量。良好的接口的設(shè)計(jì)有利于提高組 件的可用性、可理解性,有利于軟件的維護(hù)、擴(kuò)展和重用;不合理

6、 的設(shè)計(jì)則會(huì)導(dǎo)致組件難于理解、難于選擇,從而影響整個(gè)軟件的可 靠性。本文將通過對(duì)組件技術(shù)的研究,分析實(shí)現(xiàn)com接口的方法。二、com簡(jiǎn)介組件對(duì)象模型(component object model, com)是微軟公司1993 年創(chuàng)建的一種軟件組件結(jié)構(gòu)標(biāo)準(zhǔn)。冃的是為了使應(yīng)用程序更易于定 制。把一個(gè)龐大的應(yīng)用程序分成多個(gè)模塊,每一個(gè)模塊保持功能獨(dú) 立性,在協(xié)同工作時(shí),通過相互z間的接口完成實(shí)際的任務(wù)。我們 把每一個(gè)這樣的模塊稱為com組件,這些組件可以在不同的計(jì)算機(jī) 上用不同的程序設(shè)計(jì)語言單獨(dú)開發(fā),單獨(dú)編譯,單獨(dú)調(diào)試和測(cè)試。 當(dāng)所有的組件開發(fā)完成后,把它們組合在一起就得到了完整的應(yīng)用 程序。com

7、是微軟的activex, directx以及ole技術(shù)的基礎(chǔ),它被 設(shè)計(jì)成一個(gè)動(dòng)態(tài)互變組件的規(guī)范,為windows程序模塊之間的相互 通訊提供了統(tǒng)一的標(biāo)準(zhǔn),只耍客戶和組件共同遵循這一規(guī)范,雙方 就可以透明地通訊。用com開發(fā)出來的組件實(shí)際上是一些小的二進(jìn) 制代碼,可以給應(yīng)用程序、操作系統(tǒng)以及其它組件提供一些服務(wù)。多個(gè)com組件對(duì)象可以連接起來以形成應(yīng)用程序或組件系統(tǒng),并且 組件可以在運(yùn)行時(shí)、不重新鏈接或編譯應(yīng)用程序的情況下被卸下或 替換掉。三、com結(jié)構(gòu)在com標(biāo)準(zhǔn)中,引入了面向?qū)ο蟮乃枷耄愃婆cc+中對(duì)象的概念, 對(duì)象是某個(gè)類的一個(gè)實(shí)例,稱為com對(duì)象。接口是一組方法的集合, 其方法也稱為接

8、口成員函數(shù)。com組件為com對(duì)象提供活動(dòng)空間, com對(duì)象以com接口的方式提供服務(wù)。com組件、com對(duì)象、com接 口之間的關(guān)系如圖1所示。圖1: com組件、對(duì)象、接口關(guān)系圖每個(gè)com組件包含多個(gè)com對(duì)象,每個(gè)com對(duì)象提供多個(gè)com接 口供客戶使用。com組件有兩種,一是進(jìn)程內(nèi)組件,是一個(gè)dll (動(dòng)態(tài)連接庫)文 件;二是進(jìn)程外組件,是一個(gè)exe (可執(zhí)行程序)文件。當(dāng)另外的 組件或普通程序(即組件的客戶程序)調(diào)用組件的功能時(shí),它首先 創(chuàng)建一個(gè)com對(duì)象,然后通過該對(duì)象所實(shí)現(xiàn)的com接口調(diào)用它所捉 供的服務(wù)。進(jìn)程內(nèi)組件是dll程序,當(dāng)客戶調(diào)用進(jìn)程內(nèi)組件程序的 方法時(shí),進(jìn)程內(nèi)組件和客

9、戶程序在同一進(jìn)程地址空間內(nèi),客戶程序 得到的接口指針直接指向組件的vtable其效率非常高。進(jìn)程外組 件是exe程序,它不能提供引出函數(shù)供其它程序調(diào)用,因此進(jìn)程外 組件必須支持兩個(gè)命令行參數(shù)/regserver和/unregserver,以便完 成組件的注冊(cè)和取消注冊(cè)操作。四、com接口定義與實(shí)現(xiàn)(-)接口的定義在com屮接口就是一切,對(duì)于客戶來說,一個(gè)組件就是一個(gè)接口 集,客戶只要知道接口就可以對(duì)組件進(jìn)行操作了。接口類似與c+的抽象基類,定義一個(gè)接口意味著定義一個(gè)抽象方 法的集合,這些方法會(huì)被一個(gè)類實(shí)現(xiàn),用戶會(huì)調(diào)用這個(gè)類的一個(gè)實(shí) 例(對(duì)象)。接口是用 idl (interface descr

10、iption language), 接口描述語言)來定義的。下面是一個(gè)簡(jiǎn)單的接口文件:total idl.import “unknwn. idl”object, uuid (ddc68871-e08etlcf-a535-00aa00615b03) _interface itotal: iunknownhresult inputdata (in short n);hresult sum (out short *psum);上面定義了接口 itotalo因?yàn)槿魏谓涌诙际菑膇unknown接口繼承 的,所以在文件的開頭包含了 import指令(類似c+的include指 令)。每個(gè)com接口必須有2

11、個(gè)idl屬性,object屬性說明該接口 是com接口,uuid屬性用128位的全局唯一標(biāo)識(shí)符guid (globally unique identifier)在全球范圍內(nèi)唯一的標(biāo)識(shí)一個(gè)接口。接口方 法的參數(shù)具有方向?qū)傩?,in屬性表示參數(shù)是輸入到服務(wù)器的參數(shù), out屬性表示參數(shù)是從服務(wù)器輸出的參數(shù)。上面的接口有兩個(gè)方法 inputdata和sum,參數(shù)n輸入到服務(wù)器,然后服務(wù)器計(jì)算1+2+ +n的和,通過psum參數(shù)把計(jì)算結(jié)果傳冋到客戶。hresult返冋值 檢查執(zhí)行是否成功或失敗。接口文件是由midi exe程序編譯的。(二)接口的內(nèi)存結(jié)構(gòu)客戶用一個(gè)指向接口的指針來調(diào)用接口方法,接口指針又

12、指向另 一個(gè)指針(pvtable),pvtable指向接口函數(shù)表(又稱虛擬函數(shù)表,vtable),接口函數(shù) 表的每一個(gè)項(xiàng)為4個(gè)字節(jié)的函數(shù)指針,每個(gè)函數(shù)指針與對(duì)象的函數(shù) 實(shí)現(xiàn)連接起來(如圖2麻)o圖2:接口的內(nèi)存結(jié)構(gòu)(%1) com接口的特性com最重要的特點(diǎn)是一個(gè)接口一旦公布將永遠(yuǎn)保持不變.組件升級(jí) 口寸,現(xiàn)有的接口不需改變,而只需加入一些新的接口。在com中, 用一個(gè)128比特的全局唯一標(biāo)識(shí)符(globallyunique identifier, guid)的結(jié)構(gòu)來標(biāo)識(shí)一個(gè)接口,稱為接口標(biāo)識(shí)符(interface identifier) 根據(jù)定義,guid在時(shí)間和空間上都是唯一的,這樣 就可

13、以保證每個(gè)接口標(biāo)識(shí)符都是唯一的。微軟提供了兩個(gè)產(chǎn)生guid 的程序:命令行方式的guidgen. exe和對(duì)話框方式的guidgen. exe. 另外,在微軟的集成編程環(huán)境visual studio中編寫com組件時(shí), 系統(tǒng)會(huì)自動(dòng)生成guid,并加入到源程序中。若兩個(gè)不同的組件支持 同一個(gè)接口,客戶就可以使用相同的代碼處理其中任何一個(gè)組件, 這就是組件的多態(tài)性。任何com接口都可實(shí)現(xiàn)iunknown接口,因 此com庫可以按一種統(tǒng)一的方式來處理任意com組件。(%1) iunknown 接口對(duì)于com組件,只要保持接口不變,對(duì)其實(shí)現(xiàn)可以任意修改,而 不會(huì)影響到客戶對(duì)該組件的調(diào)用。真正的com接

14、口必須繼承接口 iunknown接口包含三個(gè)成員函數(shù)queryinterface> addref和 release, queryinterface的功能是查詢某個(gè)組件是否支持某個(gè)特 定的接口,若支持該函數(shù)將返回一個(gè)指向該接口的指針,否則返回 值將是一個(gè)錯(cuò)誤代碼,客戶對(duì)于某個(gè)組件不可能知道其支持的全部 接口,通過該函數(shù)可以查詢是否支持某個(gè)特定的接口。addref和 release的功能是管理組件的生命周期。實(shí)現(xiàn)的是一種名為引用計(jì) 數(shù)的內(nèi)存管理技術(shù),可以使組件能自行決定何時(shí)將自己刪除。弓i用 記數(shù)是一個(gè)整數(shù),當(dāng)對(duì)象被創(chuàng)建時(shí),引用記數(shù)開始從0增加。當(dāng)調(diào) 用addref時(shí),對(duì)象的引用記數(shù)加1。當(dāng)

15、調(diào)用release時(shí),對(duì)象的引 用記數(shù)減1。當(dāng)對(duì)象的引用記數(shù)為0時(shí),對(duì)象可以自己釋放自己。 用一個(gè)矩形表示com對(duì)象,對(duì)象所支持的接口用一個(gè)小圓圈表示, 在矩形和小圓圈之間用一條線相連,這樣就能很好地表示對(duì)象和接 口之間的關(guān)系。則ftotal對(duì)象可以表示為圖3。圖3: ftotal對(duì)象表示形式(%1) 接口的實(shí)現(xiàn)不同的程序開發(fā)人員對(duì)不同的語言有自己的喜好,只要選擇的語 言支持com組件的生成,我們就可以用此語言來開發(fā)com程序。用 c+語言,可以用類來實(shí)現(xiàn)com接口,如下所示:class ctotal: public itotal public:ctotal ();virtual ctotal

16、 ();hresult-stdcall queryinterface (refiid riid, void *ppv); /refiid 是接口的 guidunsigned long-stdcall addref ();unsigned long-stdcall release 0 ;hresuit-stdcall inputdata (short n);hresult-stdcall sum ( short *psum);每一個(gè)類也用guid來唯一標(biāo)識(shí),稱為clsido有了類以后,就可 以定義類的對(duì)象(com對(duì)象)ftotal二ncwctotal。四、結(jié)束語通過對(duì)組件的研究,可以知道程序的成功運(yùn)行正如我們希望的那 樣,一次開發(fā),多次使用,提高了軟件的復(fù)用率,增強(qiáng)了軟件的可 靠性,即使采用不同的開發(fā)語言,也可以毫不費(fèi)力地在各自的環(huán)境 中實(shí)現(xiàn),這將極大地提高軟件開發(fā)速度,降低

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論