首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

Win32 環境下動態連結庫 (DLL) 程式設計原理詳解

     編輯:VC 教學

大型應用程式常由多個獨立功能模組組成。若將所有原始碼靜態連結成單一 EXE,不僅增加檔案大小與記憶體佔用,每次修改還需重新編譯全部程式碼,嚴重影響開發效率。Windows 提供 DLL 機制完美解決此問題。

DLL 核心特性

  • 獨立編譯、測試,執行時才按需載入記憶體。
  • 可被多個應用程式共用,減少磁碟與記憶體浪費。
  • Windows 核心功能多以 DLL 實現(如 IE 核心元件)。

DLL 包含全域資料、服務函數與資源,載入時映射至呼叫進程的虛擬位址空間。Win32 下每個進程擁有獨立的讀寫全域變數副本;若需進程間共享記憶體,需使用記憶體對映檔或共享資料段。DLL 的堆疊/堆積記憶體來自呼叫進程。

匯出/匯入函數與連結方式

DLL 透過匯出函數表(符號名或序數)對外提供服務。宣告匯出函數:

__declspec(dllexport) int MyFunction(int n);

應用程式宣告對應匯入:

__declspec(dllimport) int MyFunction(int n);

並需在連結時指定匯入庫(.lib)。連結方式分兩種:

  • 隱性連結:編譯時連結 .lib,執行時系統自動載入 DLL,程式碼無需指定路徑。
  • 顯性連結:執行時呼叫 LoadLibrary/GetProcAddress 手動載入並取得函數指標,靈活度較高。

隱性連結時,連結器將 DLL 匯出符號與 .lib 內容寫入 EXE,執行時 Windows 依此資訊定位並載入 DLL,完成動態連結。重新編譯 DLL 時,若匯出介面未變,應用程式無需重新編譯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved