![組件復(fù)習(xí)資料(com)_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/4/f0d7e6ef-5b6f-4ecd-970f-8bd1178ceb35/f0d7e6ef-5b6f-4ecd-970f-8bd1178ceb351.gif)
![組件復(fù)習(xí)資料(com)_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/4/f0d7e6ef-5b6f-4ecd-970f-8bd1178ceb35/f0d7e6ef-5b6f-4ecd-970f-8bd1178ceb352.gif)
![組件復(fù)習(xí)資料(com)_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/4/f0d7e6ef-5b6f-4ecd-970f-8bd1178ceb35/f0d7e6ef-5b6f-4ecd-970f-8bd1178ceb353.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、接口的定義及作用接口是有序排列的一組函數(shù)指針,可以簡單理解為一組函數(shù),每一個接口相當(dāng)于該組件對外的一個窗口,客戶可以從不同的視角(接口)看到,獲得該組件通過該接口提供的服務(wù)(集)COM接口有哪些規(guī)定,規(guī)定的目的對接口進(jìn)行規(guī)定,是為了達(dá)到COM組件標(biāo)準(zhǔn)提出的目標(biāo)。COM接口的三個規(guī)定:1) IUknown:所有組件都有一個稱為IUknown的接口(未名接口),該接口中依次給出的三個函數(shù)是:QueryInterface,AddRef,Release。一個組件可以同時被多個客戶所使用,使用時需要載入到內(nèi)存中。為知道何時這個組件沒有客戶,可以利用一個計數(shù)器來記錄該組的使用情況。2) 其他接口:一個組件
2、的其他接口可以看作IUknown接口的子接口,即其它任何一個接口的前三個函數(shù)與IUknown接口中的三個函數(shù)相同。客戶獲得一個接口后,可以查詢其它接口是否存在。每個接口能夠進(jìn)行引用計數(shù)。3) 不變性:一旦公開了某一個接口,該接口將永遠(yuǎn)不能發(fā)生改變。包括函數(shù)在接口中的順序。改變接口部分的唯一方式是:為組件增加新的接口。目的是兼容。版本升級不影響老客戶。每一個接口有唯一的接口標(biāo)識(ID)。當(dāng)用新版本的組件替換舊版本的組件會對原來的部分產(chǎn)生影響嗎?版本升級不影響。當(dāng)組件發(fā)布了一個接口并被某個客戶使用之后,該接口絕對不會發(fā)生任何改變,而將永遠(yuǎn)保持不變。新接口可以繼承老接口,也可以完全不同。使用新接口還
3、是老接口由用戶自己決定。這種處理多個版本的方法最有效的地方在于它是無縫的。一個接口有唯一的接口表示(ID),一個組件也有唯一的一個標(biāo)識,客戶不需要任何工作既可以確定他所使用的接口是正確版本。接口的標(biāo)識是同其版本完全綁定在一起的。新版本的組件要求保持向后的兼容或許是不可能的,但是COM處理多個版本的手段在保持后向兼容不可能的情況下同樣是有效的。因為接口ID決定了它的版本,當(dāng)客戶獲取某個接口時,由于不同版本的接口實際上是不同的接口,它們有各自不同的ID,因此客戶仍能夠正確獲取正確版本。COM組件與面向?qū)ο蟪绦蛑械哪K有什么區(qū)別?軟件模塊是應(yīng)用程序為實現(xiàn)某一特定的任務(wù)和要求,而對這些要求的實現(xiàn)以模塊
4、化的形式在主程序之外單獨進(jìn)行實現(xiàn)。這種定義必須依賴于某一特定的主程序才能進(jìn)行調(diào)用,其編譯后生成的類文件也必須和主程序在同一目錄下。組件是一個單獨的,能夠?qū)崿F(xiàn)一個或多個任務(wù)的對象,它與平臺和編譯語言無關(guān),組件具有統(tǒng)一的定義和標(biāo)準(zhǔn),通過接口與調(diào)用它的應(yīng)用程序進(jìn)行交互,可以在多種不同的系統(tǒng)平臺和應(yīng)用程序中被重復(fù)的調(diào)用。對其功能進(jìn)行擴(kuò)張時,只需要增加新的接口或?qū)涌诘墓δ苓M(jìn)行新的定義即可??蓮?fù)用性強(qiáng),獨立性強(qiáng)。IUnknown接口中的三個函數(shù)的作用QueryInterface,AddRef,ReleaseQueryInterface的作用是對組件的接口進(jìn)行查詢,即:組件客戶可以通過它查詢該組件是否存在
5、某一個接口(某一組功能)。若存在某個接口,客戶可以獲得該接口,從而獲得該接口中提供的服務(wù)。AddRef和Release通過計數(shù)器共同完成引用計數(shù)功能。組件中,提供類廠(IClassFactory)接口的作用CoCreateInstance函數(shù)是創(chuàng)建組件的時候使用最多的一種方法,但是它的靈活性不能夠滿足所有組件的需求,它沒有給客戶提供一種能夠控制組件創(chuàng)建過程的方法,在建立好一個組件之后,無法控制將組件裝載或檢查客戶是否具有權(quán)限。因此需要引入類工廠以獲得更高的靈活性。CoCreatInstance實際上并沒有直接創(chuàng)建組件,用CoCreateInstance創(chuàng)建的組件實際上是通過IClassFact
6、ory創(chuàng)建的,類廠唯一的功能就是創(chuàng)建其他組件。客戶可以通過類廠所支持的接口來對類廠創(chuàng)建組件的過程加以控制。創(chuàng)建組件的標(biāo)準(zhǔn)接口就是IClassFactory。用什么方法來區(qū)分兩個組件對于客戶來說,一個組件就是一個接口集。用戶只能通過接口才能與COM組件打交道。因此如果能夠判斷兩個接口是否是同一個組件中的接口將可以區(qū)分是否是同一組件。組件的實例只有一個IUknown接口。因為當(dāng)查詢組件實例的IUknown接口時,不論通過哪一個接口,所得到的都將是同一個指針。為了確定兩個接口是不是指向同一個組件,可以通過這兩個接口查詢IUknown接口,然后將返回值進(jìn)行比較,如果相同則說明兩個組件是同一個組件,不同
7、則說明不是同一個組件。編寫COM組件的步驟具體步驟:1) 首先從COM庫中找出CLSID相應(yīng)的類廠CoGetClassObject,客戶通過調(diào)用CoGetClassObject來啟動組件的創(chuàng)建過程。2) COM庫實現(xiàn)了CoGetClassObject函數(shù),此函數(shù)查找指定組件,找到后裝載實現(xiàn)此組件的DLL。3) 接著DLL實現(xiàn)了被CoGetClassObject調(diào)用的DLLGetClassObject函數(shù),在DLLGetClassObject中創(chuàng)建類廠IClassFactory。4) 在CoGetClassObject中返回IClassFactory,產(chǎn)生pIClassFactory5) pIC
8、lassFactory調(diào)用IClassFactory:CreateInstance,從而創(chuàng)建IClassFactory。6) IClassFactory創(chuàng)建組件IX7) IClassFactory返回IX給客戶,得到pIX8) pIX調(diào)用IX:Fx,得到IX文字描述:1) 定義接口,在接口中聲明組件中需要使用的方法和變量,聲明方法使用虛函數(shù)聲明,定義的接口都要繼承IUknown。2) 定義實現(xiàn)接口方法的抽象類。實例化類之后,才會對已經(jīng)實例化的類對象分配內(nèi)存空間。對類中接口的引用,可以通過對象指向接口的指針來調(diào)用。3) 定義指向是實例化類對象的指針,并可以向調(diào)用它的接口返回標(biāo)識,生成模塊,定義文件,并在客戶可以獲取某個組件接口之前,將DLL裝載到過程空間中并創(chuàng)建此組件。4) 創(chuàng)建類廠。在類廠中使用CreateInsta
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 在職知識產(chǎn)權(quán)歸屬合同范本年
- 建設(shè)工程預(yù)拌砂漿采購合同
- 貿(mào)易采購及貨物配送合同
- 衛(wèi)生間裝修合同書年
- 大件貨物運輸合同
- 2025外墻粉刷工程承包合同簡易模板
- 房屋貸款合同范本
- 某地面工程建設(shè)工程施工合同1
- 2025廣告服務(wù)代理服務(wù)合同范本
- 2025額度抵押借款合同
- 四川省自貢市2024-2025學(xué)年上學(xué)期八年級英語期末試題(含答案無聽力音頻及原文)
- 2025-2030年中國汽車防滑鏈行業(yè)競爭格局展望及投資策略分析報告新版
- 2025年上海用人單位勞動合同(4篇)
- 新疆烏魯木齊地區(qū)2025年高三年級第一次質(zhì)量監(jiān)測生物學(xué)試卷(含答案)
- 衛(wèi)生服務(wù)個人基本信息表
- 高中英語北師大版必修第一冊全冊單詞表(按單元編排)
- 苗圃建設(shè)項目施工組織設(shè)計范本
- 廣東省湛江市廉江市2023-2024學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 學(xué)校食品安全舉報投訴處理制度
- 通用電子嘉賓禮薄
- 污水處理廠設(shè)備的操作規(guī)程(完整版)
評論
0/150
提交評論