What is “dll”?

來源:互聯網
上載者:User

下面這篇文章是我從別的地方轉載過來的,看完覺得比較好,所以就做了個reshipment,好東西大家一起研究呵呵。為尊重別人的智慧財產權,事先聲明一下! 

 

 

什麼是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

和他的常規結構、基本感念就可以了,這亮點很重要。
關於win32 API看我發的《什麼是win32 API》

這兩篇文章是我特意送給beijingfish和一些初學windows 編程的網友的,連夜敢制出來的,手都痛了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.