A. dll是什麼意思
dll的意思是:延遲鎖相環(Delay—locked Loop,簡稱DLL)技術是在PLL技術上改進得到的,被廣泛應用於時序領域中。它繼承了PLL電路的鎖相技術,但去掉了PLL電路內的振盪器部分洞基吵,取而代之的是一根延遲量可控制的延遲線。
目前DLL有兩種實現方法,一個是時鍾頻率測量法(CFM,Clock Frequency Measurement),一個是時鍾比較法(CC,Clock Comparator)。
CFM 是測量外部時鍾的頻率周期,然後以此周期為延遲值控制內部時鍾,這樣內外時鍾正好就相差了一個時鍾周期,從而實現同步。DLL就這樣反復測量反復控制延遲值,使內部時鍾與外部時鋒啟鍾保持同步。
CC 的方法則是納侍比較內外部時鍾的長短,如果內部時鍾周期短了,就將所少的延遲加到下一個內部時鍾周期里,然後再與外部時鍾做比較,若是內部時鍾周期長了,就將多出的延遲從下一個內部時鍾中刨除,如此往復,最終使內外時鍾同步。
B. 什麼是DLL技術阿
dll就是動態鏈接庫,在項目開發的時候用DLL可以帶來會很大的便利。
C. 什麼是DLL技術阿
DLL(Dynamic Link Library)文件為動態鏈接庫文件,又稱「應用程序拓展」,是軟體文件類型。在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可使用多個DLL文件,一個DLL文件也可能被不同的應用程序使用,這樣的DLL文件被稱為共則睜享DLL文件。[1]
可以理解別人寫好的子程序,你可以通過連接DLL的方式,使用別人或是自己碰盯畢寫的子程序。並且該子程序一般笑芹為機器碼。。。。
D. 動態鏈接庫(DLL)的作用是什麼
DLL為動態鏈接庫文件
動態鏈接庫的概念
在DOS環境下編過程序的讀者一定知道靜態庫的含義——程序員將實現各種功能的代碼寫成一個個子程序(函數),編譯成obj文件後,將多個obj文件組合成一個lib文件,當程序中要用到這些函數的時候,只需要指定函數名稱,編譯器就可以從庫中抽出對應的子程序代碼插入到可執行文件中去,這樣就可以不必一遍遍地重寫相同的功能代碼。這種鏈接方法就是靜態鏈接,
靜態鏈接的缺點顯而易見,如果有多個程序用到庫中的同樣函數,那麼所有這些可執行文件中都會包含一份同樣的代碼,對於每個程序幾乎必須使用的一些函數來說,如果硬碟上有一萬個程序用到這個函數,那麼就存在一萬份相同的代碼,這顯然是很浪費空間的。靜態鏈接的另外一個缺點是:如果某個函數因為發現有錯或更新演算法等種種原因需要升級版本時,必須把所有用到此函數的可執行文件都找回來重新編譯一遍陸攔,遺漏的程序中存在的還是舊版本的代碼。
DOS操作系統是單任務的操作系統,每時每刻只能有一個程序在運行,所以使用靜態鏈接浪費的空間僅表現在磁碟空間的浪費上;而Windows操作系統是多任務的,內存中會同時裝入多個程序的代碼,如果使用靜態鏈接的話,意味著有多份相同的代碼被裝入內存,這種浪費代價將是更昂貴的。
Windows的解決辦法就是使用動態鏈接庫,動態鏈接庫從表面上看也是提供了一大堆通用的函數,也可以被多個程序使用,但它和靜態庫的使用上有很多的不同點。
靜態庫僅在編譯的時候使用,編譯完成後,可執行文件就可以脫離庫文件單獨使用了,纖老而動態鏈接庫中的代碼在程序編譯的時候並不會被插入到可執行文件中,在程序運行的時候才將整個庫的代碼調入內存,所以稱為「動態鏈接」。如果有多個程序用到同一個毀悉升動態鏈接庫,Windows在物理內存中只保留一份庫的代碼,僅通過分頁機制將這份代碼映射到不同進程的地址空間中,這樣不管有多少程序在使用一個庫,庫代碼實際佔用的物理內存永遠只有一份。當然,這時候庫使用的數據段還是會被映射到不同的物理內存中,多少個程序在使用動態鏈接庫就會有多少份數據段。DLL的工作方式在圖1.6中就已經有所演示了。
當應用程序裝載動態鏈接庫的時候,程序中僅包括庫的名稱和函數的名稱,這些信息是動態尋找對應函數所必須的,程序在編譯和鏈接的時候必須插入這些定位信息,定位信息取自導入庫文件,這一點在前面的編程中已經多次涉及。
動態鏈接庫的縮寫為DLL,大部分動態鏈接庫是以擴展名為dll的文件形式存在的,但並不是只有dll擴展名的文件才是動態鏈接庫,系統中的某些exe文件、字體文件(*.fon)、一些驅動程序(*.drv)、各種控制項(*.ocx)和輸入法模塊(*.ime)等都是動態鏈接庫。實際上,系統中大部分包含公用代碼的模塊——不管擴展名是什麼——都有可能是動態鏈接庫。
一個文件是否是動態鏈接庫取決於它的文件結構,動態鏈接庫文件和可執行文件同樣使用標準的PE文件格式,僅文件頭中的屬性位不同而已,所以exe文件的一些特徵也存在於動態鏈接庫中,比如在動態鏈接庫中也可以定義並使用各種資源,可以導入並使用其他動態鏈接庫中的函數等。
有一個最重要的概念一定要牢記:動態鏈接庫是被映射到其他應用程序的地址空間中執行的,它和應用程序可以看成是「一體」的,動態鏈接庫可以使用應用程序的資源,它所擁有的資源也可以被應用程序使用,它的任何操作都是代表應用程序進行的,當動態鏈接庫進行打開文件、分配內存和創建窗口等操作後,這些文件、內存和窗口都是為應用程序所擁有的。
簡單的說,DLL就是不能自己執行的程序
E. 什麼是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
和他的常規結構、基本感念就可以了,這亮點很重要
F. 什麼是dll、ocx文件
首頁 相冊 標簽技術天地(41) 英語地帶(0) 生活休閑(9)
什麼叫做dll
up5p5m 發表於 2006-3-8 11:29:00 人們常說的「DLL」(Dynamic Link Library)也就是「動態鏈接庫」是一個可以被其它應用程序共享的程序模塊,其中封裝了一些可以被共享的程序或資源。它和可執行文件(.EXE文件)非常類似,區別在於動態鏈接庫中雖然包含了可執行代碼卻不能單獨執行,而應由相應的應用程序直接或間接調用。
DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。例如,在 Windows 操作系統中,Comdlg32 DLL 執行與對話框有關的常見函數。因此,每個程序都可以使用該 DLL 中包含的功能來實現「打開」對話框。這有助於促進代碼重用和內存的有效使用。
通過使用 DLL,程序可以實現模塊化脊歲山,由相對獨立的組件組成。例如,一個計帳程序可以按模塊來銷售。可以在運行時將各個模塊載入到主程序中(如果安裝了相應模塊)。因為模塊是彼此獨立的,所以程序的載入速度更快,而且模塊只在相應的功能被請求時才載入。
此外,可以更為容易地將更新應用於各個模塊,而不會影響該程序的其他部分。例如,您可能具有一個工資計算程序,而稅率每年都會更改。當這些更改被隔離到 DLL 中以後,您無需重新生成或安裝雀仔整個程序就可以應用更新。
什麼是 DLL?
動態鏈接庫 (DLL) 是包含函數和數據的模塊的集合。程序文件(如 .exe 文件或 .dll 文件)在運行時載入這些模塊(亦即所需的模塊映射到調用進程的地址空間)。下面兩類函數定義了 DLL: • 導出函數:這些函數由其他模塊調用。
• 內部函數:這些函數僅從定義它們的 DLL 中調用。
DLL 還導出數據。不過,這些數據由相應的函數使用。
動態鏈接和靜態鏈接
動態鏈接包括系統在載入或運行時查找導出的 DLL 函數的代碼所需的信息。
在靜態鏈接中,鏈接器將庫函數的代碼復制到調用 DLL 的每個模塊。
可以通過下列方式調用 DLL 中的函數: • 載入時動態鏈接:調用方模塊執行顯式調用以導出 DLL 函數。為 DLL 創建導入庫,然後將 DLL 鏈接到應用程序。在載入應用程序時,導入庫提供載入 DLL 和查找導出的 DLL 函數所需的信息。
• 運行時動態鏈接:在運行時載入 DLL 時,調用方模塊使用 LoadLibrary 函櫻中數或 LoadLibraryEx 函數。調用方模塊調用 GetProcAddress 函數以獲取導出的 DLL 函數的地址。
在鏈接時,Windows 搜索預安裝的一組 DLL,例如性能庫 (Kernel32.dll) 和安全庫 (User32.dll)。然後,Windows 按以下順序搜索 DLL: 1. 當前進程的可執行程序所在的目錄。
2. 當前目錄。
3. Windows 系統目錄。(GetSystemDirectory 函數獲取 Windows 系統目錄的路徑。)
4. Windows 目錄。(GetWindowsDirectory 函數獲取 Windows 目錄的路徑。)
5. PATH 環境變數中列出的目錄。
注意:LIBPATH 環境變數不用於搜索。
DLL 和靜態庫
• DLL 可節省內存並減少交換。 通過在內存中共享 DLL 的單個副本,多個進程可以同時使用一個 DLL。相比之下,對於使用靜態鏈接庫構建的每一個應用程序,Windows 都要在內存中為其載入庫代碼的一個副本。
• DLL 可節省磁碟空間。 多個應用程序可以共享磁碟上的一個 DLL 副本。相比之下,使用靜態鏈接庫構建的每一個應用程序都需要讓鏈接到程序文件映像的庫代碼作為一個單獨的專用副本。
• DLL 可節省時間。 更改 DLL 中的函數時,只要函數的參數和返回值不變,就不必重新編譯或重新鏈接使用這些函數的應用程序。但是,如果您使用靜態鏈接的對象代碼,則在更改函數後必須重新鏈接應用程序。
• DLL 可以共享函數。 在 Win32 中,DLL 可以共享函數。默認情況下,數據對於每個進程來說是獨立的。但是,靜態庫包含針對每一個進程的單獨的數據副本和函數。
DLL 入口點
DLL 有一個特殊的入口點(DllMain 函數),它在附加和分離進程和線程時運行。此行為允許根據需要創建和銷毀數據結構。文件擴展名為 .ocx、.cpl 和 .drv 的文件類型也是 DLL,盡管文件擴展名已改變。在 Windows 2.x 和 Windows 3.x 中,每個 DLL 都只有一個數據段實例,而不管有多少應用程序。在 Windows 32 中,可以將 DLL 標記為共享以導致相同的行為。但是,每個進程的默認設置是擁有 DLL 數據的專用副本。
您可以通過創建 DLL 實現以下目的: • 將程序劃分為可按需載入的單獨模塊。
• 存儲特定於語言或特定於區域的資源。
• 使您自己的應用程序能夠使用核心代碼庫。
• 生成進程內 COM 對象或 ActiveX 控制項 (OCX)。
• 將 OLE 對象用作進程內 DLL。這一用法可改進 OLE 鏈接的性能。
• 使用控制面板擴展或使用某些類型的驅動程序。
G. dll 是什麼意思如何打開這種文件
動態鏈接庫是一個能夠被應用程序和其它的DLL調用的過程和函數的集合體,它裡麵包含的是公共代碼或資源。由於DLL代碼使用了內存共享技術,在某些地方windows也給了DLL一些更高的許可權,因而DLL中可以實現一些一般程序所不能實現的功能,如實現windows的HOOK、ISAPI等。同時,DLL還為不同語言間代碼共享提供了一條方便的途徑。因而DLL在編程時應用較為廣泛,本文將介紹如何在 Delphi 中建立和使用DLL。
一.DLL 庫內存共享機制
從使用效果看,DLL和unit 很像,它們都可以被別的工程模塊所調用,但二者在內部的實現機制上確存在著差別。如果一個程序模塊中用uses語句引用了某個unit,編譯程序在編譯該模塊時,便會連同unit一起編譯,並把編譯後的可執行代碼鏈接到本程序模塊中,這就是一個程序模塊能夠調用所引用unit中過程和函數的原因。當同一個unit被多個仿渣工程所引用時,則每個工程中都含有該unit的可執行代碼,當含有該unit的多個工程同時執行時,unit的可執行代碼會隨不同工程而多次被調入內存,造成內存資源的浪費。DLL則不同,它即使被某個工程調用,編譯後仍是獨立的,也就是說編譯後,一個DLL庫形成一個單獨的可執行文件,而不與任何其它的可執行文件連接在一起,因而DLL庫並不從屬於某個特定的工程,當多個工程調用同一個DLL庫時只有第一個工程把DLL庫調入內存,其餘工程並不重復調入同一個DLL庫到內存,而是到同一個共享內存區讀取。並且,DLL的執行代碼是在程序運行期間動態調入的,而不是如unit在程序運行時就與整個工程一起調入內存。這樣便可消除unit帶來的相同代碼多處佔用內存的弊病。
二 Delphi中DLL庫的建立
在Delphi環境中,編寫一個DLL同編寫一個一般的應用程序並沒有太大的區別。事實上作為DLL主體的DLL函數的編寫,除了在內存、資源的管理上有所不同外,並不需要其它特別的手段。
一般工程文件的格式為:
program 工程標題;
uses 子句;
程序體
而DLLs工程文件的格式為:
library 工程標題;
uses 子句;
exprots 子句;
程序體
它們主要的區別有兩點:
1.一般工程文件的頭標用program關鍵字,而DLL工程文件頭標用library 關鍵字。不同的關鍵字通知編譯器生成不同的可執行文件。用program關鍵字生成的是.exe文件,而用library關鍵字生成的是.dll文件;
2.假如DLL要輸出供其它應用程序使用的函數或過程,則必須將這些函數或過程列在exports子句中。而這些函數或過程本身必須用export編譯指令進行編譯。
在Delphi主菜單file 中選new...項,在彈出的窗口中雙擊DLL圖標,便會自動給出DLL源模塊框架,如下:
Library project1;
{...注釋...}
uses
SysUtils, Classes;
begin
end.
接下來便可在USES和begin之間加入想在該DLL中實現的過程和函數的定義,並用export和exprots保字把它們引出,以便別的模塊引用,在begin和end之間鏈判加入初始化代碼,初始化代碼是用來對DLL變數初始化的。應注意,即便無初始化代碼begin與end也不可省略,如下例:
library minmax;
function Min(X, Y: Integer): Integer; export;
begin
if X < Y then Min := X else Min := Y;
end;
function Max(X, Y: Integer): Integer; export;
begin
if X > Y then Max := X else Max := Y;
end;
exports
Min index 1,
Max index 2;
begin
end.
經編譯後,並以minmax.DLL存檔後,一個DLL庫文件便形成了。
三 DLL庫的訪問
訪問DLL庫有兩種方式,一種是靜態引用,另一種是動態引用。
用靜態引用這種方法裝入DLL要做兩件事情:為DLL 庫創建一個輸入單元,以及用USES把輸入單元備喚悄連接到要使用DLL 函數的程序模塊中。為DLL庫創建的輸入單元與普通的單元的區別僅在於:在它的介面處聲明的過程、函數,並不在它的實現部分給出真正的實現代碼,而是用external關鍵字把過程、函數的實現細節委託給外部DLL模塊。
external命令的使用語法如下:
procere /function 過程/函數名;external DLL模塊名;
下面給出為上面創建的minmax.DLL庫寫的輸入單元源文件testdll .pas,從中可看出輸入單元與一般單元的一些差別,代碼如下所示:
unit testdll;
interface
uses
function Min (X, Y: Integer): Integer;
function Max (X, Y: Integer): Integer;
implementation
function Min; external 『minmax.DLL』;
function Max; external 『minmax.DLL』;
end.
一個應用程序若想調用minmax.DLL中的函數,只須在其uses語句中加入testdll 單元即可。
動態裝入DLL,要用到Windows的三個API函數。Loadlibrary、Freelibrary和GetprocAddress 。loadlibrary函數用來裝入DLL庫,其調用格式如下:
function loadlobrary (DLLfileName:Pchar): THandle:
當不再需要一個DLL庫時,應調用FreeLibrary函數將其釋放,以空出寶貴的內存資源,其調用格式如下:
procere FreeLibrary (Libmole:THandle)
Libmole 為由LoadLibrary調用得到的DLL庫句柄。在用loadlobrary 函數裝入某個DLL庫和調用FreeLibrary釋放該DLL庫之間的程序段中, 可以使用該DLL庫中的過程和函數,具體使用方法是:用GetprocAddress函數把DLL庫中函數的地址傳遞給程序中某個函數變數,再用該變數實現DLL函數的調用。GetprocAddress函數聲名如下,
function GetprocAddress (Libmole:THandle:procname:pchar):TFarProc:
如下例所示:
type
TTimeRec = record
Second: Integer;
Minute: Integer;
Hour: Integer;
end;
TGetTime = procere(var Time: TTimeRec);
THandle = Integer;
var
Time: TTimeRec;
Handle: THandle;
GetTime: TGetTime;
...
begin
Handle := LoadLibrary('DATETIME.DLL');
if Handle <> 0 then
begin
@GetTime := GetProcAddress(Handle, 'GetTime');
if @GetTime <> nil then
begin
GetTime(Time);
with Time do
WriteLn('The time is ', Hour, ':', Minute, ':', Second);
end;
FreeLibrary(Handle);
end;
end;
在調用動態鏈接庫時應注意, 所需動態鏈接庫須與應用程序在同一目錄或Windows System 目錄下。
動態鏈接庫是 Windows下程序組織的一種重要方式,使用動態鏈接庫可以極大地保護用戶在不同開發工具、不同時期所做的工作,提高編程效率。
H. 什麼是DLL技術阿
建議使用騰訊電腦管家
騰訊電腦管家電腦耐念診所針對commom.dll、MSVC**.dll、d3dx**.dll等常見的dll文件丟失問題,推出了一鍵修復功能。在網上下載安裝騰訊電腦管家8.0版本昌笑困後,打開程序,點擊右上角「電腦診所——軟體問題——丟失dll文件」,進入dll一鍵修復區,找到相應要修升滾復的dll選項,點擊「立即修復」即可恢復正常。十分方便,建議試試。