<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>

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


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

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

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


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

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

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

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

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

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

    返回版面帖子列表

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








    簽名
    主站蜘蛛池模板: 欧美日韩不卡合集视频| 一本色道久久88亚洲精品综合| 毛片在线播放a| 国产六月婷婷爱在线观看| jizz中国jizz欧洲/日韩在线| 丰满人妻一区二区三区免费视频 | 久九九久福利精品视频视频| 波多野结av衣东京热无码专区| 国产人妖视频一区二区破除| 99久久久国产精品免费蜜臀| 巨胸喷奶水www视频网站| 五十路在线观看| 欧美日本一道高清免费3区| 又大又硬又爽又深免费看 | 亚洲日本中文字幕天天更新| 男女爽爽无遮拦午夜视频| 国产又色又爽又刺激视频| 91最新地址永久入口| 天天操天天干天天爽| 久久久久777777人人人视频| 日韩在线视频线视频免费网站| 亚洲第一黄色网址| 狠狠躁狠狠躁东京热无码专区| 国产一区二区三区无码免费| 韩国福利视频一区二区 | 国产高潮国产高潮久久久| 中国xxx69视频| 故意打开双腿让翁公看| 亚洲av永久无码精品秋霞电影影院| 欧美成人精品高清在线观看| 免费香蕉依人在线视频久| 综合激情网五月| 国产女人18一级毛片视频| 91蜜桃在线观看| 好猛好紧好硬使劲好大国产| 久久亚洲精品国产亚洲老地址| 最近在线中文字幕影院网| 亚洲欧美综合在线天堂| 玩弄丰满少妇视频| 国产99久9在线视频| 西西人体44rtwww高清大但|