一個基礎(chǔ)的COM實現(xiàn)

一個基礎(chǔ)的COM實現(xiàn)

ID:41565795

大小:58.99 KB

頁數(shù):6頁

時間:2019-08-27

一個基礎(chǔ)的COM實現(xiàn)_第1頁
一個基礎(chǔ)的COM實現(xiàn)_第2頁
一個基礎(chǔ)的COM實現(xiàn)_第3頁
一個基礎(chǔ)的COM實現(xiàn)_第4頁
一個基礎(chǔ)的COM實現(xiàn)_第5頁
資源描述:

《一個基礎(chǔ)的COM實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、一個基礎(chǔ)的COM實現(xiàn)目錄一、術(shù)語定義二、接口模型三、對象模型1、部件的規(guī)格2、部件實例的創(chuàng)建與部件的標(biāo)識四、部件的定義和實現(xiàn)1、基礎(chǔ)部件2、Getlnterface機(jī)制3、Createlnstance&Destroylnstance機(jī)制五、模型使用規(guī)范及示例1、定義接口2、定義及實現(xiàn)部件3、部件的引用4、部件的跨動態(tài)聯(lián)接庫使用一、術(shù)語定義接口:一組函數(shù)(方法和屬性)的組合??捎肅++的純虛類表示。部件:實現(xiàn)若干接口的部件,相當(dāng)于傳統(tǒng)面向?qū)ο箦惖母拍?。?用來定義和實現(xiàn)部件的c卄類。實例:部件所創(chuàng)建的單個實體,相當(dāng)于傳統(tǒng)面向?qū)ο笾袑ο蟮母?/p>

2、念。二、接口模型接口模型的主要內(nèi)容定義于vPosyinterface.h>中。接口模型包括,接口標(biāo)識INN、基礎(chǔ)接口IBase當(dāng)前定義如下:typedefunsignedlongINN;//forInterfaceIDs#define1NTFclass//forInterfaceDefinitionstaticconstINNIN_IBase=0;INTFIBase{public:GetInterface(INNinlD,void**pplntf)=0;GetObject(void**ppObj)=0;Destroylnstance()=

3、0;virtualBOOLvirtualBOOLvirtualBOOL};IBase標(biāo)識號為0。包含三個函數(shù):Getlnterface用于獲取指定ID的接口;GetObject用于獲取實現(xiàn)該接口的部件實例;DestroyObject用于銷毀實現(xiàn)該接口的部件實例。所有接口都必須繼承IBase接II,并實現(xiàn)其成員函數(shù)。還需定義一個唯一的接口標(biāo)識一般命名為IN」nterfaceNameo三、對象模型對喙模型的主要內(nèi)容定義于vPosyObject.h>中。1、部件的規(guī)格每一個部件必須至少實現(xiàn)IBase接口。并實現(xiàn)規(guī)定的特征。一個標(biāo)準(zhǔn)的部件原型如卜

4、classCPosyObject{protected:CPosyObjcct(){};virtual-CPosyObject(){};public:staticBOOLCreatelnstance(void**ppObj);staticBOOLCreatelnstance(INNinlD,void**pplntf);部件的構(gòu)造函數(shù)與析構(gòu)函數(shù)不為Public,以禁止部件實例被直接創(chuàng)建。部件具有兩個Createlnstance靜態(tài)函數(shù),川于創(chuàng)建部件實例。其屮一個可直接獲取指向部件實例的指針,另一個可獲取指定接口的接口指針。但一般并不允許肓接

5、調(diào)用這兩個函數(shù)。2、部件實例的創(chuàng)建與部件的標(biāo)識部件的客戶至少可以分為兩利U-種具有定義部件的類的訪問權(quán),這種客戶可以直接調(diào)用部件的Createlnstance成員隊[數(shù)來創(chuàng)建實例;另一種無法収得部件的定義(即不包含定義class的頭文件),這時必須通過部件標(biāo)識來創(chuàng)建部件實例。標(biāo)準(zhǔn)的部件使用者一般通過對彖模烈的基礎(chǔ)服務(wù)ObjSew的靜態(tài)成員函數(shù)Createlnstance來創(chuàng)建實例。該函數(shù)需給出部件標(biāo)識,然后返回指定接口的指針。部件標(biāo)識即為部件的第二個Createlnstance靜態(tài)成員函數(shù)的地址。部件標(biāo)識的定義為:typedefBOOL(

6、*OBN)(INN,void**);命名一般為ON_ObjcctNamc。使用如下:OBNON_PosyObject=&(CposyObject::CreateInstance);???IBase*pIBase=NULL;If(ObjServ::CreateInstance(ON_PosyObject,IN」Base,(void**)&pIBase)){???pIBase->DestroyInstance();這種方法可以在不暴露部件類具體實現(xiàn)的悄況下提供創(chuàng)建部件實例的能力。四、部件的定義和實現(xiàn)部件定義與實現(xiàn)的輔助服務(wù)主要定義于

7、Object.h>H'o這種輔助服務(wù)是可選的。1、基礎(chǔ)部件部件定義與實現(xiàn)主要借助基礎(chǔ)部件BaseObject和一套輔助宏來實現(xiàn)?;谶@套輔助服務(wù)的部件一般直接或間接繼承于BaseObject,并同時繼承所需實現(xiàn)的接口。BaseObject定義如卜:classCBascObjcct:publicIBasc{protected:CBaseObject(){};virtual?CBaseObject(){};virtualvoid*_InternalGetInterface(INNinlD)if(inlD==INJBase){return(IB

8、ase*)this;}returnNULL;public:virtualBOOLGetInterface(INNinlD,void**pplntf)=0;virtualBOOLGetObjec

當(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ò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。