① DLL是什麼意思
什麼是
DLL?
DLL
是一個包含可由多個程序同時使用的代碼和數據的庫。例如,在
Windows
操作系統中,Comdlg32
DLL
執行與對話框有關的常見函數。因此,每個程序都可以使用該
DLL
中包含的功能來實現「打開」對話框。這有助於促進代碼重用和內存的有效使用。
通過使用
DLL,程序可以實現模塊化,由相對獨立的組件組成。例如,一個計帳程序可以按模塊來銷售。可以在運行時將各個模塊載入到主程序中(如果安裝了相應模塊)。因為模塊是彼此獨立的,所以程序的載入速度更快,而且模塊只在相應的功能被請求時才載入。
此外,可以更為容易地將更新應用於各個模塊,而不會影響該程序的其他部分。例如,您可能具有一個工資計算程序,而稅率每年都會更改。當這些更改被隔離到
DLL
中以後,您無需重新生成或安裝整個程序就可以應用更新。
下表說明了
Windows
操作系統中的一些作為
DLL
實現的文件:
•
ActiveX
控制項
(.ocx)
文件
ActiveX
控制項的一個示例是日歷控制項,它使您可以從日歷中選擇日期。
•
控制面板
(.cpl)
文件
.cpl
文件的一個示例是位於控制面板中的項。每個項都是一個專用
DLL。
•
設備驅動程序
(.drv)
文件
設備驅動程序的一個示例是控制列印到列印機的列印機驅動程序
② dll是什麼文件的後綴名
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調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。
③ .dll是什麼文件的後綴名
.dll是動態連接庫文件,它將一些常用且通用的功能代碼或者資源數據封裝起來模塊化,使得不同的程序不同的開發人員可以輕松調用,避免了許多重復的工作。刪除後需要用到此文件的程序就可能無法正常運行,有時刪除不了可能因為調用它的其他程序沒有關閉,要知道該dll可以被任何程序調用,由於它的靈活性,一些病毒程序利用這個特點將破壞性的代碼製作成dll文件,並注入到其他進程中做壞事,呵呵。
④ 什麼是dll文件dll文件是什麼意思
DLL(動態連接庫),既然是動態,那麼就是有靜態連接庫,我想如果這么說大家
會更明白:
也許有的人在DOS下編寫過程序都明白這么一件事情,我寫了一個程序,裡面有一
個功能就是把屏幕的內容翻轉在轉90°列印出來,那麼我需要把整個程序寫好放
到我的所有代碼中,但是如果我寫另外一個程序的時候也有相通的功能,我可以
調用以前的程序這個功能嗎?當然是不可以的了,所以我就要重新的寫一次,如
果有5個需要調用這個功能的程序,我的這個功能函數需要20K的地方,那麼我的
硬碟就有80K的垃圾出現(20k*5 - 20k),這僅僅是一個函數,大家是否可以數
清除WINDOWS如果這樣來寫,需要多少函數嗎?你看看所有的按鈕、滾動條、
Listbox\Textbox\checkBox\窗體、列印對話框、顏色對話框、打開、保存、另存
、字體對話框、文件的排列、拷貝、粘貼...... 這一切的一切是不是都需要在所
有的程序中都要寫出來呢?如果真的是這個樣子,那麼我們的windows應該按TB來
計算了(1TB=1024GB),也許你說你的硬碟很大,那麼他們還要在運行的時候占
用相同大下的內容呢!所以發展出來了,動態連接庫(dll)這個感念:
動態連接,就是把這些相通的功能、函數都放到一種特殊形式的windwos可執行文
件中(dll),生成一個DLL的時候,程序員需要寫出,其中包含那些函數需由其
他程序來訪問。這個過程叫做對函數的「導出」
創建windows程序的時候,專門的連接程序對程序的對象文件進行掃描,並生成一
個列表,列出那些調用的函數在那個DLL那個位置,指定各個函數所在位置的過程
叫做對函數的「導入」,當程序運行的時候,一旦要求用到執行文件內部沒有的
函數,windows就會自動裝載動態連接庫,使應用程序可以訪問這些函數。此時,
每個函數的地址都會解析出來,並且以動態的方式連接到程序里--這便是術語
「動態連接」的由來。
另外還有一個好處,就是當你更新你的這個函數的版本和功能的時候,靜態連接
所需要做的工作是多少(假設按windwos來說他有上千個這樣的函數,一共有100
多個程序來使用,那靜態連接需要100000次的更新,動態連接只需要1000次)
,從而也節省了內存的空間。
動態連接庫不一定是DLL擴展名的,也可以是ocx、vbx、exe、drv 等等的
大家可以發現在調用WIN32 api的時候裡面都會有說明是來自於那個dll等宿主文
件的
現在我就在這里講講一些標準的dll用途:
看下面這個API聲明:
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)
As Long
看見kernel32了嗎,其實這個就是kernel32.dll的名字,你可以在你的硬碟里找
到他,這就是說GetWindowsDirectory這個函數是在kernel32.dll裡面,他的別名
是GetWindowsDirectoryA,()中是他的參數,有兩個一個是字元型,一個是長
整型,返回值也是長整型。lpBuffer ------- String,指定一個字串緩沖區,
用於裝載Windows目錄名。除非是根目錄,否則目錄中不會有一個中止用的「\」
字元nSize ---------- Long,lpBuffer字串的最大長度,返回值 為Long,復制
到lpBuffer的一個字串的長度。如lpBuffer不夠大,不能容下整個字串,就會返
回lpBuffer要求的長度。零表示失敗。
這就是API聲明的意義所在!
DLL的說明
KERNEL32.DLL ---- 低級內核函數。使用他可以完成內存管理、任務管理、
資源控制等。
USER32.DLL------於windows管理有關的函數。消息、菜單、游標、計時器
、通信和其他大多數非現實函數都可以從這里找到
GDI32.DLL-------圖形設備介面庫。於設備輸出有關的函數:大多數繪圖
、顯示場景、圖元文件、坐標及其字體函數都可以從這梨找到。
COMDLG32.DLL\LZ32.DLL\VERSION.DLL\---這都是提供一些附加函數的庫,包
括通用對話框、文件壓縮、版本控制的支持。
COMCTL32.DLL --------一個新的windows控制項集合,比如TreeView和RichTextBox
等等,最初這個好像是為了win95而製作的,但是現在也使用與NT下
MAPI32.DLL---------提供了一套電子郵件的專用函數
NETAPI32.DLL--------提供了一套訪問和控制網路的函數
ODBC32.DLL--------(不用我再說了吧)ODBC功能的DLL之一
WINMM.DLL------(這可不是WINDOWS的MM)是多媒體控制訪問函數集合
windows api正在快速發展和變化,是你我任何單個人都追趕不上的速度發展,幸
運的是我們不用掌握所有的windows API,只是掌握需要經常使用的WINDOWs api
和他的常規結構、基本感念就可以了,這亮點很重要。
⑤ dll文件是什麼
DLL(Dynamic Link Library)文件,即動態鏈接庫,也有人稱作應用程序拓展。
DLL文件是一種可執行文件,它允許程序共享執行特殊任務所必需的代碼和其他資源。Windows提供的DLL文件中包含了允許基於 Windows 的程序在 Windows 環境下操作的許多函數和資源。
dll文件的特點
因為DLL有佔用內存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。
動態鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執行程序或其它DLL調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。
以上內容參考:網路-dll
⑥ 什麼是DLL文件有何作用
DLL(Dynamic Link Library)文件即庫文件,是動態鏈接庫文件,又稱「應用程序拓展」,是軟體文件類型。
在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。
(6)dll是什麼文件擴展閱讀
你可以簡單的把DLL看成一種倉庫,它提供給你一些可以直接拿來用的變數、函數或類。在倉庫的發展史上經歷了「無庫-靜態鏈接庫-動態鏈接庫」的時代。
靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果採用靜態鏈接庫,則無論你願不願意,lib中的指令都被直接包含在最終生成的EXE文件中了。
但是若使用DLL,該DLL不必被包含在最終EXE文件中,EXE文件執行時可以「動態」地引用和卸載這個與EXE獨立的DLL文件。靜態鏈接庫和動態鏈接庫的另外一個區別在於靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。
參考資料來源:網路-庫文件
⑦ dll是什麼文件格式
DLL的全稱是Dynamic Link Library, 中文叫做「動態鏈接文件」。
在Windows操作系統中, DLL對於程序執行是非常重要的, 因為程序在執行的時候, 必須鏈接到DLL文件, 才能夠正確地運行。
而有些DLL文件可以被許多程序共用。因此, 程序設計人員可以利用DLL文件, 使程序不至於太過巨大。
(7)dll是什麼文件擴展閱讀
DLL是動態連接庫。使用動態連接庫的一些好處是:
1.多個應用程序共享代碼和數據:比如Office軟體的各個組成部分有相似的外觀和功能,這就是通過共享動態連接庫實現的。
2.在鉤子程序過濾系統消息時必須使用動態連接庫。
3.動態連接庫以一種自然的方式將一個大的應用程序劃分為幾個小的模塊,有利於小組內部成員的分工與合作。而且,各個模塊可以獨立升級。如果小組中的一個成員開發了一組實用常式,他就可以把這些常式放在一個動態連接庫中,讓小組的其他成員使用。
參考資料來源:網路-動態鏈接庫文件
⑧ DLL是什麼文件
DLL文件即動態鏈接庫文件,是一種可執行文件,它允許程序共享執行特殊任務所必需的代碼和其他資源
比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟體系統時仍會被使用。在構造軟體系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序 EXE 文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁碟空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫大的 EXE 程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的復雜性,也不利於階段性的單元測試。
Windows 系統平台上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL (Dynamic Linkable Library) 文件,並可對它們單獨編譯和測試。在運行時,只有當 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調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。
AaBbCc 回答時間 2008-05-20 10:08
檢舉
Windows操作系統的動態鏈接庫,裡面封裝了程序需要的函數以及驅動,需要由自身主程序自己調用,無需認為代開也無法認為打開,通過錯誤程序打開後可能會損壞這個文件,文件損壞後可能出現程序無法運行的錯誤,建議不要去碰這個文件!