Com對(duì)象的實(shí)現(xiàn)

Com對(duì)象的實(shí)現(xiàn)

ID:45311276

大?。?68.50 KB

頁數(shù):40頁

時(shí)間:2019-11-11

Com對(duì)象的實(shí)現(xiàn)_第1頁
Com對(duì)象的實(shí)現(xiàn)_第2頁
Com對(duì)象的實(shí)現(xiàn)_第3頁
Com對(duì)象的實(shí)現(xiàn)_第4頁
Com對(duì)象的實(shí)現(xiàn)_第5頁
資源描述:

《Com對(duì)象的實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、COM對(duì)象的實(shí)現(xiàn)潘愛民2003-9-26http://www.icst.pku.edu.cn/CompCourse2003/內(nèi)容COM對(duì)象注冊(cè)表創(chuàng)建COM對(duì)象類廠COM對(duì)象的標(biāo)識(shí)——CLSID是GUID的一種用法創(chuàng)建對(duì)象的時(shí)候必須要提供CLSIDCOM對(duì)象的身份身份是否一致的可判斷性COM對(duì)象和接口圖示COM對(duì)象客戶的交互實(shí)體包括屬性和方法,或者狀態(tài)和操作能夠提供服務(wù)——通過COM接口對(duì)象的實(shí)現(xiàn)由組件完全包裝起來COM對(duì)象與C++對(duì)象的比較層次差異封裝特性可重用性多態(tài)性的表現(xiàn)形式不同接口描述語言:IDLinterfaceIDictionary:IUnknown{HRESU

2、LTInitialize();HRESULTLoadLibrary([in]string);HRESULTInsertWord([in]string,[in]string);HRESULTDeleteWord([in]string);HRESULTLookupWord([in]string,[out]string*);HRESULTRestoreLibrary([in]string);HRESULTFreeLibrary();};MIDL可以由IDL文件生成C/C++接口描述IDL簡介以O(shè)SFIDL為基礎(chǔ)基本數(shù)據(jù)類型與C語言非常接近,包括結(jié)構(gòu)、聯(lián)合、枚舉、typedef等

3、interfacecoclasslibrary可以產(chǎn)生類型庫IUnknown接口的IDL描述IDL接口定義:[local,object,uuid(00000000-0000-0000-C000-000000000046),pointer_default(unique)]interfaceIUnknown{typedef[unique]IUnknown*LPUNKNOWN;HRESULTQueryInterface([in]REFIIDriid,[out,iid_is(riid)]void**ppvObject);ULONGAddRef();ULONGRelease();}

4、IDL中類的描述[uuid(1e196b20-1f3c-1069-996b-00dd010fe676),version(1.0),helpstring("Aclass"),helpcontext(2481),appobject]coclassmyapp{[source]interfaceIMydocfuncs:IUnknown;dispinterfaceDMydocfuncs;};IDL中庫的描述[uuid(12345678-1234-1234-1234-123456789ABC),helpstring("Hello2.0TypeLibrary"),lcid(0x0409

5、),version(2.0)]libraryHello{/*Librarydefinitionstatements*/};IDL中l(wèi)ibrary示例[object,uuid(...),]interfaceIKnown:IUnknown{import"unknwn.idl";};[]libraryKnownLibrary{//referenceinterfaceIKnown:interfaceIKno

6、wn;//orcreateanewclass:[]coclassKnowMore{interfaceIKnown;};};IDL的意義IDL語言無關(guān)跨語言的中間語言MIDL.exe產(chǎn)生C++頭文件定義相當(dāng)于C++定義MIDL.exe產(chǎn)生TLB類型庫COM本身提供了一套基礎(chǔ)設(shè)施來解釋類型庫所有的標(biāo)準(zhǔn)接口都可以在SDK中找到IDL描述編譯IDLxxx.IDL文件MIDL.exexxx.hC++頭文件xxx_i.cGUIDxxx_p.cP/Sdlldata.cxxx.tlb用于客戶/服務(wù)器proxy/stub用于其他編程語言,如Java、V

7、BCOM對(duì)象實(shí)現(xiàn)形式進(jìn)程內(nèi)組件inprocesscomponent進(jìn)程外組件outofprocesscomponent進(jìn)程內(nèi)組件組件:做成DLL——引出函數(shù)客戶:用到的API函數(shù),LoadLibrary、GetProcAddress、FreeLibrary說明:1.也可以引出全局變量2.DumpBin檢查組件的引出函數(shù)和變量進(jìn)程外組件實(shí)現(xiàn)形式:EXEIPC:DDE、消息機(jī)制、共享內(nèi)存、RPC/LPC等等例:應(yīng)用調(diào)用系統(tǒng)服務(wù)進(jìn)程外組件(續(xù))回顧:對(duì)象與客戶之間的連接客戶通過vtable與對(duì)象進(jìn)行通信客戶如何獲得第一個(gè)接口指針?C

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

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

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