![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-8/28/22/8fb2a770-5adc-4d6b-93df-e6cc47337f29/8fb2a770-5adc-4d6b-93df-e6cc47337f29pic.jpg)
![c++類的動(dòng)態(tài)組件化技術(shù)_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-8/28/22/8fb2a770-5adc-4d6b-93df-e6cc47337f29/8fb2a770-5adc-4d6b-93df-e6cc47337f291.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C類的動(dòng)態(tài)組件化技術(shù)類的動(dòng)態(tài)組件化技術(shù)0640303401蔣浩平關(guān)鍵詞關(guān)鍵詞COM組件接口生命周期C類ATL組件類C基類ATL模板基類繼承摘要摘要在組件化編程的時(shí)代,如何復(fù)用歷史累積的大量沒有組件特性的C類?本文從工程的角度對(duì)這一問題進(jìn)行探討,利用現(xiàn)有組件技術(shù),提出了一套將C類平滑過渡到COM組件的完整解決方案。1.問題的提出問題的提出自從Microsoft公布了COM(ComponentObjectModel,組件對(duì)象模型,簡(jiǎn)稱COM
2、)技術(shù)以后,Windows平臺(tái)上的開發(fā)模式發(fā)生了巨大的變化,以COM為基礎(chǔ)的一系列組件技術(shù)將Windows編程帶入了組件化時(shí)代,傳統(tǒng)的面向?qū)ο蟮能浖_發(fā)方法已經(jīng)逐漸被面向組件的方法所取代。COM標(biāo)準(zhǔn)建立在二進(jìn)制可執(zhí)行代碼級(jí)的基礎(chǔ)上,不論何種工具、語言開發(fā)的組件,只要符合COM規(guī)范,就可復(fù)用于VC、VB、Delphi、BC等各種開發(fā)環(huán)境中。COM的語言無關(guān)性將軟件復(fù)用的層次從源代碼級(jí)推進(jìn)到了二進(jìn)制級(jí),復(fù)用更方便,也更安全。然而,COM技術(shù)
3、帶來全新的軟件設(shè)計(jì)和開發(fā)模式的同時(shí),也帶來了新的問題。許多軟件公司在開發(fā)自己的軟件產(chǎn)品過程中,都累積了大量C類,這些代碼設(shè)計(jì)精良,功能完備,以面向?qū)ο蟮臉?biāo)準(zhǔn)來檢驗(yàn)無可挑剔。然而,這些代碼不支持COM,將無法在COM時(shí)代繼續(xù)被復(fù)用。如果它們?cè)谲浖M件化的趨勢(shì)中被淘汰,那對(duì)軟件公司和開發(fā)人員來說都是極大的損失。COM專家DonBox曾說過,“COMisasuperC”。這給了我們一個(gè)啟示,是否可以實(shí)現(xiàn)一種技術(shù),能夠動(dòng)態(tài)的為普通C類加上一層C
4、OM的封裝呢?這樣,既可以保持這些代碼自身的完整和特性,使它們能繼續(xù)應(yīng)用于原來的系統(tǒng),也可以在需要作為組件使用的時(shí)候,把它們動(dòng)態(tài)轉(zhuǎn)變成組件,復(fù)用于新系統(tǒng)。一個(gè)自然而然的想法是,為每一個(gè)C類開發(fā)一個(gè)只暴露一個(gè)接口的COM組件,將原C類的每個(gè)public方法都對(duì)應(yīng)于該接口的一個(gè)方法,接口方法的實(shí)現(xiàn)可以簡(jiǎn)單的調(diào)用相對(duì)應(yīng)的C類方法即可。這樣,程序邏輯由原有的C類控制,但COM層的封裝則由組件提供。基本思路如下圖所示:指向調(diào)用調(diào)用暴露接口ATL組
5、件類(CATL)接口(IItf)Method1Method2CImplementm_pCPPObjLink2CPPObj(CImplementpObj)應(yīng)用C類(CImplement)public:Method1public:Method22.2.集合型集合型C類的組件化類的組件化集合型C類的情況有所不同。集合型C類以數(shù)組(array)、列表(list)、映射表(map)的形式管理其它C對(duì)象。集合對(duì)象和它管理的元素對(duì)象都被包裝成組件后,
6、集合型ATL對(duì)象可能調(diào)用一個(gè)“Destroy”方法,期望刪除某一個(gè)元素ATL對(duì)象;這一操作的實(shí)質(zhì)卻是,集合型C對(duì)象的“Destroy”方法被調(diào)用,將元素C對(duì)象刪除了,而元素ATL對(duì)象卻不知道。這一操作的結(jié)果導(dǎo)致了元素的ATL對(duì)象存在,而其綁定的C對(duì)象卻被刪除的情況,兩者的生命周期出現(xiàn)了不一致。為了解決這個(gè)問題,我們需要在C對(duì)象被刪除時(shí),能將ATL對(duì)象同時(shí)刪除;而在ATL對(duì)象的引用計(jì)數(shù)為0需要?jiǎng)h除自身時(shí),也能把C對(duì)象刪除。可行的解決方案是
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++ bitset類的使用及簡(jiǎn)介
- c++課程設(shè)計(jì)——矩陣類
- c++動(dòng)態(tài)優(yōu)先級(jí)調(diào)度算法
- c++類對(duì)象的復(fù)制-拷貝構(gòu)造函數(shù)
- c++程序動(dòng)態(tài)切片系統(tǒng)的研究與實(shí)現(xiàn)
- C++程序動(dòng)態(tài)切片系統(tǒng)的研究與實(shí)現(xiàn).pdf
- c++課程設(shè)計(jì)——日期類設(shè)計(jì)報(bào)告
- 實(shí)例解析c++、cli的串行化
- c++主要的技術(shù)領(lǐng)域應(yīng)用
- c++課程設(shè)計(jì)---棧類的設(shè)計(jì)與使用
- 基于SoPC系統(tǒng)的C++類模塊硬件實(shí)現(xiàn).pdf
- 未來網(wǎng)絡(luò)組件行為的動(dòng)態(tài)感知與組件聚類機(jī)制研究.pdf
- c++課程設(shè)計(jì)---字符串類的設(shè)計(jì)
- 《c++程序設(shè)計(jì)課程設(shè)計(jì)——復(fù)數(shù)類》
- c++論文
- c++講解
- c++字典
- 指針(pointer)——c c++的精髓
- c++(20122013c)
- c++建議
評(píng)論
0/150
提交評(píng)論