青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨感而發

雜七雜八

統計

留言簿(13)

閱讀排行榜

評論排行榜

【轉】DLL的簡單介紹

轉自:http://baike.baidu.com/view/4373.htm


DLL文件(Dynamic Linkable Library 即動態鏈接庫文件),是一種不能單獨運行的文件,它允許程序共享執行特殊任務所必需的代碼和其他資源
比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個 軟件系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟件系統時仍會被使用。在構造軟件系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序 EXE 文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會占用更多的磁盤空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點 是,在編寫大的 EXE 程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的復雜性,也不利于階段性的單元測試。
Windows 系統平臺上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL 文件,并可對它們單獨編譯和測試。在運行時,只有當 EXE 程序確實要調用這些 DLL 模塊的情況下,系統才會將它們裝載到內存空間中。這種方式不僅減少了 EXE 文件的大小和對內存空間的需求,而且使這些 DLL 模塊可以同時被多個應用程序使用。Windows 自己就將一些主要的系統功能以 DLL 模塊的形式實現。
一般來說,DLL 是一種磁盤文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴展名的系統文件都可以是 DLL。它由全局數據、服務函數和資源組成,在運行時被系統加載到調用進程的虛擬空間中,成為調用進程的一部分。如果與其它 DLL 之間沒有沖突,該文件通常映射到進程虛擬空間的同一地址上。DLL 模塊中包含各種導出函數,用于向外界提供服務。DLL 可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個 DLL 在內存中只有一個實例;DLL 實現了代碼封裝性;DLL 的編制與具體的編程語言及編譯器無關。
在 Win32 環境中,每個進程都復制了自己的讀/寫全局變量。如果想要與其它進程共享內存,必須使用內存映射文件或者聲明一個共享數據段。DLL 模塊需要的堆棧內存都是從運行進程的堆棧中分配出來的。Windows 在加載 DLL 模塊時將進程函數調用與 DLL 文件的導出函數相匹配。Windows 操作系統對 DLL 的操作僅僅是把 DLL 映射到需要它的進程的虛擬地址空間里去。DLL 函數中的代碼所創建的任何對象(包括變量)都歸調用它的線程或進程所有。
調用方式:
1、靜態調用方式:由編譯系統完成對 DLL 的加載和應用程序結束時 DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對 DLL 的應用記錄減1,直到所有相關程序都結束對該 DLL 的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一般要求。
隱式的調用:需要把產生動態連接庫時產生的 .LIB 文件加入到應用程序的工程中,想使用 DLL 中的函數時,只須說明一下。隱式調用不需要調用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個 DLL 文件時,鏈接程序會自動生成一個與之對應的 LIB 導入文件。該文件包含了每一個 DLL 導出函數的符號名和可選的標識號,但是并不含有實際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應用程序項目中。
當程序員通過靜態鏈接方式編譯生成應用程序時,應用程序中的調用函數與 LIB 文件中導出符號相匹配,這些符號或標識號進入到生成的 EXE 文件中。LIB 文件中也包含了對應的 DL L文件名(但不是完全的路徑名),鏈接程序將其存儲在 EXE 文件內部。
當應用程序運行過程中需要加載 DLL 文件時,Windows 根據這些信息發現并加載 DLL,然后通過符號名或標識號實現對 DLL 函數的動態鏈接。所有被應用程序調用的 DLL 文件都會在應用程序 EXE 文件加載時被加載在到內存中。可執行程序鏈接到一個包含 DLL 輸出函數信息的輸入庫文件(.LIB文件)。操作系統在加載使用可執行程序時加載 DLL。可執行程序直接通過函數名調用 DLL 的輸出函數,調用方法和程序內部其 它的函數是一樣的。
2、動態調用方式:是由編程者用 API 函數加載和卸載 DLL 來達到調用 DLL 的目的,使用上較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。
顯式的調用:
是指在應用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動態連接庫調進來,動態連接庫的文件名即是上面兩個函數的參數,再用 GetProcAddress() 獲取想要引入的函數。自此,你就可以象使用如同本應用程序自定義的函數一樣來調用此引入函數了。在應用程序退出之前,應該用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 釋放動態連接庫。直接調用 Win32 的 LoadLibary 函數,并指定 DLL 的路徑作為參數。LoadLibary 返回 HINSTANCE 參數,應用程序在調用 GetProcAddress 函數時使用這一參數。GetProcAddress 函數將符號名或標識號轉換為 DLL 內部的地址。程序員可以決定 DLL 文件何時加載或不加載,顯式鏈接在運行時決定加載哪個 DLL 文件。使用 DLL 的程序在使用之前必須加載(LoadLibrary)加載DLL從而得到一個DLL模塊的句柄,然后調用 GetProcAddress 函數得到輸出函數的指針,在退出之前必須卸載DLL(FreeLibrary)。
正因為DLL 有占用內存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。
動態鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執行程序或其它DLL調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。

posted on 2009-04-02 09:22 shongbee2 閱讀(807) 評論(4)  編輯 收藏 引用 所屬分類: windows相關

評論

# re: 【轉】DLL的簡單介紹 2009-04-02 10:14 Sunshine Alike

哈,不錯。搞明白了些東西!  回復  更多評論   

# re: 【轉】DLL的簡單介紹 2009-04-02 12:48 shongbee2

@Sunshine Alike
哈哈,很高興能給您帶來幫助。加油。
  回復  更多評論   

# re: 【轉】DLL的簡單介紹 2009-04-02 17:51 Sunshine Alike

@shongbee2
我還屬于菜鳥一級,問題多多,請多指教!大家一起進步  回復  更多評論   

# re: 【轉】DLL的簡單介紹 2009-04-05 14:52 shongbee2

哈哈。我也是菜鳥。大家加油。呵呵  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99国产精品国产精品久久| 国产日产欧美a一级在线| 亚洲精品1区| 91久久久久久国产精品| 欧美区高清在线| 亚洲在线观看免费| 欧美一区二区三区另类| 亚洲成人在线免费| 亚洲精品之草原avav久久| 国产精品不卡在线| 久久精品女人天堂| 欧美国产日本在线| 欧美一二三视频| 久久人91精品久久久久久不卡| 亚洲激情自拍| 亚洲欧美不卡| 亚洲精品小视频| 亚洲欧美日韩国产精品| 亚洲国产成人久久综合| 亚洲视频精品在线| 永久免费精品影视网站| 一本色道综合亚洲| 在线观看视频一区| 一区二区日韩欧美| 在线观看视频一区二区| 亚洲先锋成人| 亚洲精品国精品久久99热一| 亚洲欧洲av一区二区| 亚洲精品视频免费| 久久九九99| 午夜电影亚洲| 欧美精品手机在线| 免费在线观看日韩欧美| 国产精品美女久久久久久免费| 欧美黑人在线播放| 国产日韩欧美精品在线| 日韩一区二区久久| 亚洲国产欧美不卡在线观看| 亚洲区第一页| 国产精品午夜在线观看| 亚洲第一在线视频| 国内精品久久久久久影视8| 日韩视频二区| 亚洲精品久久久久久下一站| 久久久久.com| 久久精品人人做人人综合| 欧美香蕉视频| 亚洲老司机av| 亚洲人屁股眼子交8| 久久久噜噜噜久久久| 久久久久综合| 国产视频精品免费播放| 亚洲性感美女99在线| 亚洲视频日本| 欧美日韩免费观看一区=区三区| 欧美大片免费| 亚洲黄色尤物视频| 久久综合色天天久久综合图片| 久久久水蜜桃| 樱花yy私人影院亚洲| 久久裸体艺术| 免费不卡在线观看| **网站欧美大片在线观看| 久久视频在线免费观看| 老司机一区二区三区| 在线不卡a资源高清| 久久久青草婷婷精品综合日韩| 美女成人午夜| 亚洲日本乱码在线观看| 欧美激情a∨在线视频播放| 91久久久精品| 亚洲一区二区三区免费观看 | 亚洲精品日韩激情在线电影| 亚洲美女av在线播放| 欧美日韩高清区| 中文国产一区| 久久久久.com| 亚洲第一伊人| 欧美日韩日本国产亚洲在线 | 欧美激情无毛| 一区二区三区鲁丝不卡| 国产精品日本精品| 欧美综合77777色婷婷| 欧美激情麻豆| 亚洲一区欧美一区| 国产亚洲成精品久久| 麻豆精品精华液| 99精品欧美一区二区三区| 久久成人在线| 亚洲欧洲日产国产网站| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 在线观看91精品国产麻豆| 欧美激情bt| 亚洲欧美日韩区| 欧美激情一区二区三区 | 亚洲国产精品日韩| 欧美日韩一区二区精品| 久久成人羞羞网站| 亚洲毛片av| 老司机凹凸av亚洲导航| 欧美福利专区| 香蕉免费一区二区三区在线观看| 国产午夜精品一区二区三区欧美| 麻豆精品91| 午夜日韩激情| 日韩亚洲一区二区| 久久综合福利| 午夜精品久久久久久久| 亚洲国产mv| 国产一区二区三区四区hd| 欧美日韩精品一区| 美女网站久久| 欧美中文日韩| 亚洲自拍偷拍色片视频| 91久久精品一区| 欧美不卡一卡二卡免费版| 欧美一区二区免费观在线| 亚洲精品免费在线播放| 狠狠色综合网站久久久久久久| 国产精品成人aaaaa网站| 另类国产ts人妖高潮视频| 欧美伊人久久久久久久久影院| 99精品国产福利在线观看免费 | 欧美专区在线| 午夜精品视频在线观看| 在线视频日韩精品| 亚洲理论电影网| 亚洲人成网站在线播| 在线播放一区| 亚洲高清网站| 在线观看日产精品| 樱桃国产成人精品视频| 一色屋精品亚洲香蕉网站| 国产亚洲精品久久久久久| 国产精品你懂的在线| 国产精品久久久久久av福利软件| 欧美精品自拍偷拍动漫精品| 欧美顶级大胆免费视频| 玖玖视频精品| 欧美二区在线观看| 欧美黄色aaaa| 欧美日韩精品免费观看视一区二区| 美女黄色成人网| 欧美高清在线观看| 欧美精品三区| 国产精品国产三级国产普通话99| 欧美日韩午夜精品| 国产精品久久久| 国产欧美日韩一区二区三区| 国产一区自拍视频| 在线欧美日韩| 99国产精品国产精品久久| 亚洲小视频在线观看| 亚洲女人小视频在线观看| 欧美一区二区三区视频在线 | 亚洲国产精品一区二区第一页| 欧美国产欧美亚洲国产日韩mv天天看完整 | 在线亚洲伦理| 午夜精品久久久久久久久久久久| 亚洲欧美三级伦理| 久久九九精品| 亚洲国产欧美日韩| 夜夜嗨av一区二区三区四区| 午夜一级在线看亚洲| 久久综合狠狠综合久久综合88| 欧美国产成人在线| 国产精品嫩草久久久久| 在线精品亚洲| 亚洲专区在线| 亚洲大胆人体视频| 国产精品剧情在线亚洲| 国产资源精品在线观看| 亚洲人成人77777线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久国产66| 最新中文字幕亚洲| 亚洲欧美日韩中文播放| 欧美国产国产综合| 国产日韩一区二区三区在线播放| 亚洲国产精品成人| 欧美一级艳片视频免费观看| 亚洲电影免费观看高清| 亚洲欧美在线一区二区| 欧美国产日韩一区二区| 国产视频亚洲| 在线亚洲一区二区| 欧美成人午夜视频| 亚洲欧美在线另类| 欧美日韩精品| 亚洲精品美女久久7777777| 久久精品国产亚洲一区二区| 亚洲美女av黄| 男人天堂欧美日韩| 国产亚洲欧美一区在线观看| 中文网丁香综合网| 欧美激情一二区| 久久婷婷色综合| 国产一区二区三区自拍| 亚洲欧美影音先锋| 一区二区av在线|