1樓:
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呼叫來完成某項工作的函式。只有在其它模組呼叫動態連結庫中的函式時,它才發揮作用。
2樓:
它是dynamic link library 的縮寫形式,動態連結庫 (dll) 是作為共享函式庫的可執行檔案。動態連結提供了一種方法,使程序可以呼叫不屬於其可執行**的函式。函式的可執行**位於一個 dll 中,該 dll 包含一個或多個已被編譯、連結並與使用它們的程序分開儲存的函式。
dll 還有助於共享資料和資源。多個應用程式可同時訪問記憶體中單個dll 副本的內容。
3樓:super志欣
1程式檔案
2用c++等彙編語文
3無法使用,都是程式檔案.(你是不是想開啟看看裡面是什麼呀!)裝個c++就能開啟了!
4樓:匿名使用者
額。。樓上說的太詳細了,,頂起
諮詢一下感情,諮詢一下,感情方面的事
實話實說,大概率的情況下是堅持不久的,按你的說法,你們白天的工作應該也比較累,晚上還有多少精力維繫感情,其次,接觸的時間少了,可以聊的,或者共同話題會變得越來越少啊!不過也應該看你們是處於那個階段,和心理成熟度怎麼樣,有的愛情即使很久沒有交流,見面時也是依然的熱烈。如果都到了結婚的年齡,那應該會比較...
心理諮詢一下,求心理諮詢看一下
呵呵基本還算不上是心理疾病那麼嚴重 感覺稍微有點選擇障礙症 通常遇到需要做選擇的時候就會比較躑躅,猶豫不決其實,你要知道,選擇就意味著放棄,你選擇了這個,就意味著要放棄其他個 而選擇又是必然有風險的 既然風險是必然的,也就是說,無論你做怎樣的選擇都是要面臨風險的那你還猶豫什麼呢?結果是一樣滴 就本案...
諮詢一下索尼T
不建議在網上買,這個 又不是非常便宜。給你個假棒你要哭死。那記憶棒上面的防偽標識可以撕下來貼到其他的產品上面的。索尼相機包?99 是那老闆5元在外面進的仿包。沒誰送原裝的。那保護貼和後面那個什麼魔布就是一個包裝裡面的東西。你買貼就有那個布。別以為他東西送得多,應該還有個三角架。這機器是2800.除開...