COM原理及應(yīng)用----COM對象和接口

COM原理及應(yīng)用----COM對象和接口

ID:40523270

大?。?8.00 KB

頁數(shù):6頁

時間:2019-08-04

COM原理及應(yīng)用----COM對象和接口_第1頁
COM原理及應(yīng)用----COM對象和接口_第2頁
COM原理及應(yīng)用----COM對象和接口_第3頁
COM原理及應(yīng)用----COM對象和接口_第4頁
COM原理及應(yīng)用----COM對象和接口_第5頁
資源描述:

《COM原理及應(yīng)用----COM對象和接口》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、COM原理及應(yīng)用----COM對象和接口1、COM對象的理解  COM對象類似于C++語言中類的概念,類的每個實(shí)例代表一個COM對象,它也包括屬性(即狀態(tài))和方法(即操作),狀態(tài)反映對象的存在,方法就是接口。2、COM對象的標(biāo)識-CLSID  GUID是一個128位的隨機(jī)數(shù),重復(fù)概率極低。它的值來源于兩部分:空間值(網(wǎng)卡地址或隨機(jī)數(shù))和時間值?! ~@得GUID值可以使用VC++提供的工具:GUIDGen.exe和UUIDGen.exe?;蛘呤褂肅OM庫的API函數(shù)CoCreatGuid()。3、COM對象與C++對象的比較封裝特性在COM對象中,數(shù)據(jù)是完全封裝在對象內(nèi)部,外部不可能直接訪問對

2、象的數(shù)據(jù)屬性。通過COM對象和客戶程序提供的接口成員函數(shù)訪問對象的屬性。COM對象的數(shù)據(jù)成員的封裝性是以組件為最終邊界的,對于對象用戶是完全透明的、不可見的;而C++對象的封裝特性只是語義上的封裝,對于對象用戶是可見的。COM對象將數(shù)據(jù)完全封裝在對象的內(nèi)部。C++對象的封裝是在語義上的封裝,通過不同的數(shù)據(jù)類型實(shí)現(xiàn)數(shù)據(jù)的封裝。可重用性COM對象的可重用性表現(xiàn)在COM對象的包容和聚合,一個對象可以完全使用另一個對象的所有功能;而C++對象的可重用性表現(xiàn)在C++類的繼承性,派生類可以調(diào)用其父類的非私有成員函數(shù)?!   OM對象的多態(tài)性通過其接口體現(xiàn),C++對象的多態(tài)性通過其虛函數(shù)體現(xiàn)。4、COM

3、接口的作用和意義  COM規(guī)范的核心內(nèi)容是關(guān)于接口的定義,雖然COM本身并不復(fù)雜,但是圍繞COM接口有很多內(nèi)容值得仔細(xì)探討,包括接口的標(biāo)識、接口函數(shù)的調(diào)用習(xí)慣、參數(shù)處理、接口與對象的關(guān)系以及接口與C/C++的關(guān)系、COM接口多具有的特性等?! OM定義了一套完整的接口規(guī)范,不僅可以彌補(bǔ)API作為組件接口的不足,還從分發(fā)揮了組件對象的優(yōu)勢,并實(shí)現(xiàn)了組件對象的多態(tài)性。5、接口定義和標(biāo)識接口是包含了一組函數(shù)的數(shù)據(jù)結(jié)構(gòu),通過這組數(shù)據(jù)結(jié)構(gòu),客戶代碼可以調(diào)用組件對象的功能??蛻舫绦蚴褂靡粋€接口數(shù)據(jù)結(jié)構(gòu)的指針來調(diào)用接口成員函數(shù)。接口指針實(shí)際上又指向另一個指針,這第二個指針指向一組函數(shù)指針(即一組函數(shù)地址

4、),成為接口函數(shù)表。接口函數(shù)表中每一項(xiàng)為4個字節(jié)的函數(shù)指針,每個函數(shù)指針與對象的具體實(shí)現(xiàn)聯(lián)系起來?! 募夹g(shù)上講,接口是包含了一組函數(shù)的數(shù)據(jù)結(jié)構(gòu),通過這組數(shù)據(jù)結(jié)構(gòu),客戶代碼可以調(diào)用組件對象的功能?! 】蛻舫绦蛴靡粋€指向接口函數(shù)結(jié)構(gòu)的指針來調(diào)用接口成員函數(shù)。實(shí)際上接口指針指向另一個指針pVtable。接口函數(shù)表稱為虛函數(shù)表(VirtualFunctionTable,簡稱vtable),指向vtable的指針為pVtable。對于一個接口來說,它的虛函數(shù)表vtable是確定的。6、接口設(shè)計(jì)的問題  在接口成員函數(shù)中,字符串變量必須用Unicode字符指針,這是COM規(guī)范的要求?! OMAPI函

5、數(shù)使用大多數(shù)語言慣用的_stdcall調(diào)用習(xí)慣。  用C語言定義COM接口,需要有結(jié)構(gòu)體struct定義其接口結(jié)構(gòu),接口成員函數(shù)必須有一個this指針?! ∮肅++語言定義COM接口,因?yàn)橛蒀++語言class的實(shí)現(xiàn)機(jī)理可以看出,COM接口結(jié)構(gòu)中的vtable與class的vtable(類的虛函數(shù)表)完全一致,因此,用class描述COM接口是最方便的手段。此時,接口成員函數(shù)隱藏了this指針?! lass型接口的說明要比struct型接口的說明簡捷得多。7、COM接口與對象的聯(lián)系  接口類只是一種描述,并不提供具體的實(shí)現(xiàn)過程。如果COM對象要實(shí)現(xiàn)接口,則COM對象必須以某種方式把它自身與

6、接口類聯(lián)系起來,然后把接口類的指針暴露給客戶程序,于是客戶程序就可以調(diào)用對象的接口功能了?! ∮胏lass型接口通過把接口指針(this)與對象數(shù)據(jù)綁定在一起的方法實(shí)現(xiàn)對COM接口的支持比較直觀、簡捷易于理解。實(shí)際上,也可以采用其他的方法來實(shí)現(xiàn)接口,只要接口成員函數(shù)中this指針(即接口指針)與對象數(shù)據(jù)能建立確定的連接,在接口成員函數(shù)中可以訪問到對象數(shù)據(jù)即可。例如,VC++的MFC庫和ATL(activetemplatelibrary,活動模板庫)模板庫分別采用了不同的機(jī)制來提供對COM接口的支持。8、接口描述語言IDL  COM規(guī)范在采用OSF的DCE規(guī)范描述遠(yuǎn)程調(diào)用接口IDL(inter

7、facedescriptionlanguage,接口描述語言)的基礎(chǔ)上,進(jìn)行擴(kuò)展形成了COM接口的描述語言。接口描述語言提供了一種不依賴于任何語言的接口描述方法,因此,它可以成為組件程序和客戶程序之間的共同語言。COM規(guī)范使用的IDL接口描述語言不僅可用于定義COM接口,同時還定義了一些常用的數(shù)據(jù)類型,也可以描述自定義的數(shù)據(jù)結(jié)構(gòu),對于接口成員函數(shù),我們可以制定每個參數(shù)的類型、輸入輸出特性,甚至支持可變長度的數(shù)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。