久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久

Rss & SiteMap

曙海教育集團(tuán)論壇 http://www.bjzhda.cn

曙海教育集團(tuán)論壇
共1 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]
[瀏覽完整版]

標(biāo)題:技術(shù)討論總結(jié) -之- DLL和COM

1樓
wangxinxin 發(fā)表于:2010-12-14 14:52:04
本周技術(shù)討論會(huì)主要議題是DLL和COM

DLL是微軟創(chuàng)造的二進(jìn)制級(jí)別代碼重用和應(yīng)用程序管理的技術(shù). DLL有如下這些好處:
1. 由于DLL動(dòng)態(tài)加載的特性, 使得DLL模塊和應(yīng)用程序主干相剝離, 便于程序的升級(jí) -----升級(jí)某個(gè)模塊的功能只需覆蓋某個(gè)DLL就可以了, 無(wú)需重新編譯全部代碼.
2. DLL的另一個(gè)好處也來(lái)自動(dòng)態(tài)加載, 因此依賴于這個(gè)模塊的其他各類應(yīng)用程序不需與DLL編譯在一起, 因此省出了更多的硬盤空間. 假如使用靜態(tài)鏈接, 則每一個(gè)應(yīng)用程序都需包含相應(yīng)的模塊鏡像, 對(duì)磁盤的浪費(fèi)是很嚴(yán)重的.
3. 更為重要的, 使用DLL還有助于節(jié)省內(nèi)存. 因?yàn)橄到y(tǒng)為DLL提供了引用計(jì)數(shù), 所有加載DLL的進(jìn)程共享DLL的頁(yè)面(當(dāng)然數(shù)據(jù)不能共享,數(shù)據(jù)由進(jìn)程自己保存.能夠共享的是相當(dāng)于代碼段的頁(yè)面),因此DLL使得內(nèi)存的使用更有效.
4. 使用DLL可以實(shí)現(xiàn)多語(yǔ)言編程.例如VB的程序可以調(diào)用C++代碼實(shí)現(xiàn)的DLL模塊里面的函數(shù).

DLL有兩種加載方式, 一種是隱示加載, 就是在應(yīng)用程序里包含DLL編寫者提供的.h文件和編譯時(shí)產(chǎn)生的.lib文件. 這樣DLL將會(huì)在程序啟動(dòng)時(shí)加載入進(jìn)程. 可以想見(jiàn), 如word這類的程序在啟動(dòng)之時(shí)如此緩慢, 就是在不斷的加載各種DLL模塊.
另一種加載方式就是在程序中調(diào)用LoadLibrary函數(shù)顯示加載DLL, 然后通過(guò)調(diào)用GetProcAddress函數(shù)獲取相應(yīng)函數(shù)的地址(即函數(shù)指針), 從而調(diào)用DLL內(nèi)的函數(shù). 這種做法有一個(gè)很好的優(yōu)點(diǎn)就是不必所有的DLL都在啟動(dòng)時(shí)加載, 很多DLL模塊都可以在需要使用的時(shí)候再臨時(shí)加載, 有些DLL假如沒(méi)有用到可以一直不加載. 我個(gè)人認(rèn)為這是很好的用戶體驗(yàn). 我不理解的是為什么MS的各類產(chǎn)品沒(méi)有使用這種方式進(jìn)行程序設(shè)計(jì).或許他已經(jīng)用了, 但是啟動(dòng)時(shí)候必須加載的DLL項(xiàng)目太多?我就不再猜測(cè)了..
顯示加載的DLL需要手動(dòng)卸載, 調(diào)用FreeLibrary函數(shù)卸載它.

與普通的EXE一樣, DLL也有一個(gè)進(jìn)入點(diǎn)函數(shù), 名字叫做DllMain, 這個(gè)函數(shù)接受三個(gè)參數(shù), HINSTANCE hInst, DWORD fdwReason, PVOID fImpLoad
我在這里只討論第二個(gè)參數(shù)fdwReason. 它可以是4個(gè)值: DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH
分別表示DLL首次加載,DLL從進(jìn)程中釋放, DLL線程的構(gòu)造和終止. 其實(shí)系統(tǒng)為DLL提供了引用計(jì)數(shù), DLL只加載入RAM一次, 所有進(jìn)程共享DLL的各個(gè)頁(yè)面, 所以只有第一次加載會(huì)調(diào)用帶有DLL_PROCESS_ATTACH的DllMain. 但每次DLL從進(jìn)程中釋放都會(huì)調(diào)用帶DLL_PROCESS_DETACH的DllMain, 這是因?yàn)檫M(jìn)程保存了DLL里面的一些變量可能需要釋放掉.
因此DllMain可以阻止進(jìn)程結(jié)束.它可以在DLL_PROCESS_DETACH消息中放一個(gè)死循環(huán),等待所有資源都被釋放掉才退出. 如果有些資源出了問(wèn)題, 就可能導(dǎo)致DLL無(wú)法正常退出.這就是為什么有些程序即使你去點(diǎn)小紅叉叉也結(jié)束不了進(jìn)程的原因.這種情況可以調(diào)用TerminateProcess函數(shù)強(qiáng)關(guān)進(jìn)程.這就是為什么通過(guò)任務(wù)管理器仍然能結(jié)束進(jìn)程的原因(但是這樣做有可能丟失數(shù)據(jù)...)
共1 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .01563 s, 2 queries.
主站蜘蛛池模板: 成人影院一区二区三区 | 欧美日韩一区二区视频图片 | 色www永久免费网站国产 | 日本一区二区三区精品视频 | 亚洲羞羞裸色私人影院 | 91亚洲精品久久91 | 九九色综合 | 九草视频在线 | 日产乱码精品一二三区 | 大伊香蕉精品视频在线 | 国产高清免费影视在线观看 | 亚洲欧美日韩精品香蕉 | 337p粉嫩日本亚洲大胆艺术照 | 亚洲国语| 黄色毛片视频校园交易 | 欧美成人精品手机在线观看 | www.亚洲黄色| 天堂8在线天堂资源bt | 久久久久欧美情爱精品 | 久久久欧美综合久久久久 | 中文字幕乱 | 手机国产日韩高清免费看片 | 免费一级毛片在线播放不收费 | 国产精品.com | 欧美午夜网 | 在线免费精品视频 | 蜜桃欧美性大片 | 一级成人| 欧美亚洲国产片在线观看 | 久久99久久99精品免观看 | 九九综合九九 | 2022免费国产精品福利在线 | 爽死你个放荡粗暴小淫货双女视频 | 久久综久久美利坚合众国 | 国产综合精品久久亚洲 | 国产精品久久久久久久免费 | 久久久久久久久性潮 | 欧美一级精品 | 国产成a人亚洲精v品久久网 | 又黄又湿又爽吸乳视频 | 国产成人国产在线观看入口 |