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

VC++ DLL 編程深度解析(一):從靜態庫到動態鏈接庫的演進與核心概念建立

     編輯:VC 教學

本系列開幕篇建立 DLL 核心認知:從「無庫 → 靜態庫 → 動態庫」的演進邏輯、DLL 與靜態庫的本質區別、VC++ 三類 DLL 分類、學習路徑與調試查看工具鏈。

庫演進三部曲

  1. 無庫時代:所有代碼集中單一 EXE,複用靠複製貼上,維護噩夢。
  2. 靜態鏈接庫 (.lib):編譯期將目標代碼完整複製進最終 EXE。優點:部署單一文件、無運行時依賴。缺點:多 EXE 佔用重複空間、更新需重新鏈接所有 EXE、庫不可再包含其他動態庫。
  3. 動態鏈接庫 (.dll):運行時按需映射進進程地址空間。優點:多進程共享內存單份代碼、獨立更新不影響調用者、可再封裝其他靜態/動態庫。缺點:部署需攜帶 DLL、版本地獄風險、載入耗時略高。
  4. DLL 三大核心認知

    1. 語言無關性:遵循調用約定(__stdcall/__cdecl)與二進制佈局,任何語言編寫的 DLL 均可互調(VB 調 C++ DLL,C# P/Invoke 系統 DLL 等)。
    2. 系統級普及:kernel32.dll(內存/進程)、user32.dll(UI/窗口)、gdi32.dll(繪圖)構成 Windows API 基石,MessageBox 即來自 user32.dll。
    3. VC++ 三類 DLL:
      • Non-MFC DLL:純 C 介面,零 MFC 依賴,通用性最強。
      • MFC Regular DLL:內含 CWinApp 派生類,可用 MFC,導出 C 介面,跨語言可調。
      • MFC Extension DLL:導出 MFC 派生類,僅限同版本 MFC 共享庫應用調用。

    靜態庫快速入門(建立庫概念)

    創建靜態庫專案

    File → New → Project → Win32 Static Library,名稱 libTest。

    源碼

    // lib.h
    #ifndef LIB_H
    #define LIB_H
    extern "C" int add(int x, int y);
    #endif
    
    // lib.cpp
    #include "lib.h"
    int add(int x, int y) { return x + y; }

    調用專案

    #include 
    #include "..\libTest\lib.h"
    #pragma comment(lib, "..\Debug\libTest.lib")
    
    int main() { printf("2+3=%d", add(2,3)); }

    或 Tools → Options → Directories → Library files 加入庫路徑。

    庫調試與查看工具鏈

    調試策略:同一 Workspace 雙專案

    • 庫專案 + 調用專案置於同一工作區。
    • 調用專案設為啟動項,調用處 F11 單步進入庫源碼。
    • 適用靜態/動態庫統一調試流程。

    查看 DLL 導出表:Depends.exe

    • 菜單 Tools → Dependency Walker 或獨立運行 Depends.exe。
    • 打開 user32.dll → 紅框顯示 MessageBoxA/W/Ex 等導出函數。
    • 拖入 EXE 可查看其依賴 DLL 拓撲圖。

    學習本系列建議

    • 基礎:掌握 C 指針/結構體、C++ 類/繼承/虛函數、MFC 基礎架構(文檔/視圖/消息映射)。
    • 實踐:每個範例必須親手敲碼、編譯、調試,所有工程已打包提供下載(含 Workspace)。
    • 目標:系列結束能獨立開發三類 DLL、解決資源/導出/調試/部署全鏈路問題。

    建立正確的 DLL 心智模型,是後續掌握 MFC 普通/擴展 DLL、COM 組件、插件架構的基石。

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