【桌面運維】DLL文件是什么?有幾種調(diào)用方式?
一、DLL文件是什么?
DLL(Dynamic Link Library)文件為動態(tài)鏈接庫文件,又稱“應用程序拓展”,是軟件文件類型。在Windows中,許多應用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即DLL文件,放置于系統(tǒng)中。當我們執(zhí)行某一個程序時,相應的DLL文件就會被調(diào)用。一個應用程序可使用多個DLL文件,一個DLL文件也可能被不同的應用程序使用,這樣的DLL文件被稱為共享DLL文件。
意義:
DLL文件中存放的是各類程序的函數(shù)(子過程)實現(xiàn)過程,當程序需要調(diào)用函數(shù)時需要先載入DLL,然后取得函數(shù)的地址,最后進行調(diào)用。使用DLL文件的好處是程序不需要在運行之初加載所有代碼,只有在程序需要某個函數(shù)的時候才從DLL中取出。另外,使用DLL文件還可以減小程序的體積。
通過使用 DLL,程序可以實現(xiàn)模塊化,由相對獨立的組件組成。
二、調(diào)用方式
1、靜態(tài)調(diào)用方式:
由編譯系統(tǒng)完成對 DLL 的加載和應用程序結(jié)束時 DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對 DLL 的應用記錄減1,直到所有相關(guān)程序都結(jié)束對該 DLL 的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一般要求。
隱式的調(diào)用:需要把產(chǎn)生動態(tài)連接庫時產(chǎn)生的 .LIB 文件加入到應用程序的工程中,想使用 DLL 中的函數(shù)時,只須說明一下。隱式調(diào)用不需要調(diào)用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個 DLL 文件時,鏈接程序會自動生成一個與之對應的 LIB 導入文件。該文件包含了每一個 DLL 導出函數(shù)的符號名和可選的標識號,但是并不含有實際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應用程序項目中。
當應用程序運行過程中需要加載 DLL 文件時,Windows 根據(jù)這些信息發(fā)現(xiàn)并加載 DLL,然后通過符號名或標識號實現(xiàn)對 DLL 函數(shù)的動態(tài)鏈接。所有被應用程序調(diào)用的 DLL 文件都會在應用程序 EXE 文件加載時被加載在到內(nèi)存中??蓤?zhí)行程序鏈接到一個包含 DLL 輸出函數(shù)信息的輸入庫文件(.LIB文件)。操作系統(tǒng)在加載使用可執(zhí)行程序時加載 DLL??蓤?zhí)行程序直接通過函數(shù)名調(diào)用 DLL 的輸出函數(shù),調(diào)用方法和程序內(nèi)部其 它的函數(shù)是一樣的。
2、動態(tài)調(diào)用方式:
是由編程者用 API 函數(shù)加載和卸載 DLL 來達到調(diào)用 DLL 的目的,使用上較復雜,但能更加有效地使用內(nèi)存,是編制大型應用程序時的重要方式。
顯式的調(diào)用:是指在應用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動態(tài)連接庫調(diào)進來,動態(tài)連接庫的文件名即是上面兩個函數(shù)的參數(shù),再用 GetProcAddress() 獲取想要引入的函數(shù)。自此,你就可以象使用如同本應用程序自定義的函數(shù)一樣來調(diào)用此引入函數(shù)了。在應用程序退出之前,應該用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 釋放動態(tài)連接庫。直接調(diào)用 Win32 的 LoadLibary 函數(shù),并指定 DLL 的路徑作為參數(shù)。LoadLibary 返回 HINSTANCE 參數(shù),應用程序在調(diào)用 GetProcAddress 函數(shù)時使用這一參數(shù)。GetProcAddress 函數(shù)將符號名或標識號轉(zhuǎn)換為 DLL 內(nèi)部的地址。程序員可以決定 DLL 文件何時加載或不加載,顯式鏈接在運行時決定加載哪個 DLL 文件。使用 DLL 的程序在使用之前必須加載(LoadLibrary)加載DLL從而得到一個DLL模塊的句柄,然后調(diào)用 GetProcAddress 函數(shù)得到輸出函數(shù)的指針,在退出之前必須卸載DLL(FreeLibrary)。
正因為DLL 有占用內(nèi)存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。
動態(tài)鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執(zhí)行程序或其它DLL調(diào)用來完成某項工作的函數(shù)。只有在其它模塊調(diào)用動態(tài)鏈接庫中的函數(shù)時,它才發(fā)揮作用。
本文鏈接:http://rockbackup.com/help/918.html

華企盾DSC數(shù)據(jù)防泄密系統(tǒng)可實現(xiàn)AES256/國密SM4文件透明加解密、U盤加密管理、CAD圖紙加密、辦公文件加密、源代碼加密、財務報表加密、OA/ERP防泄密、屏幕水印管控、終端行為審計等功能。為政府、企事業(yè)單位等不同行業(yè)提供不同應用的針對性解決方案。
相關(guān)文章
- 【加密系統(tǒng)】應用程序無法啟動
- 【加密系統(tǒng)】客戶端右鍵菜單不顯示
- 【桌面運維】使用正確的賬戶和密碼登錄Win10共享文件夾,卻···
- 【加密系統(tǒng)】華為電腦提示加載驅(qū)動失敗
- 【加密系統(tǒng)】Windows安全中心攔截客戶
- 【加密系統(tǒng)】客戶端接入U盤無法識別
- 【加密系統(tǒng)】ISPSoft無法訪問網(wǎng)絡問題
- 【網(wǎng)絡運維】網(wǎng)絡連接中斷案例分析:交換機故障引發(fā)的內(nèi)網(wǎng)通信中···
- 【加密系統(tǒng)】控制臺未開啟圖片格式的落地加密,但是客戶端保存和···
- 【加密系統(tǒng)】DSC表格無法打開排查思路