波多在线播放_激情深爱五月_久久欧美精品_成人超碰_国产久_www.pixiv.moe


曙海教育集團論壇開發(fā)語言培訓專區(qū)VB語言 → 技術討論總結 -之- DLL和COM


  共有8171人關注過本帖樹形打印

主題:技術討論總結 -之- DLL和COM

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
技術討論總結 -之- DLL和COM  發(fā)帖心情 Post By:2010-12-14 14:52:04

本周技術討論會主要議題是DLL和COM

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

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

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

支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

技術討論總結 -之- DLL和COM








簽名
主站蜘蛛池模板: 日本在线无 | 2021国产成人午夜精品 | 日日狠狠的日日日日 | 毛片a级毛片免费播放100 | 成人免费无毒在线观看网站 | 三级日韩 | 亚洲狠狠丁香婷婷综合久久久 | 免费午夜不卡毛片 | 久草久草视频 | 亚洲久久一区 | 婷婷综合网站 | 免费国产成人高清视频网站 | 欧美视频免费 | av国产精品| 精品欧美一区手机在线观看 | 欧美一区不卡 | 国产成人精品在线观看 | 免费看一区二区三区 | 国产精品久久久久久免费 | 久久综合婷婷香五月 | 欧美国产激情二区三区 | 欧美日韩综合精品 | 欧美日韩在线国产 | 99热综合| 欧美日韩精品 | a免费国产一级特黄aa大 | 欧美精品在线观看 | 亚洲一级毛片免费看 | 久久精品成人免费国产片桃视频 | 国产欧美日韩视频在线观看 | 69pao强力打造免费高清 | 91视频官网 | 国产一区二区在线免费观看 | 国产在线观看中文字幕 | 国产1区在线观看 | 91精品国产综合久久精品 | 色爱综合网 | 波多野结衣中文在线观看 | 色婷婷亚洲五月色综合色 | 天天操天天插天天干 | 在线观看视频91 |