系列目標:系統掌握 DLL 設計、導出/導入、調試、部署全流程
| 階段 | 特點 | 缺點 |
|---|---|---|
| 無庫 | 所有代碼編譯進單一 EXE | 代碼複用難、編譯慢、體積大 |
| 靜態庫 | .lib 鏈接時合併進 EXE | 多 EXE 佔用重複代碼、更新需重新鏈接、不能包含 DLL |
| 動態庫 | .dll 運行時加載,進程間共享 | 部署依賴、版本地獄、加載性能開銷 |
extern "C" + __stdcall),VB、C#、Delphi、Python 皆可調用。kernel32.dll (內存/進程)、user32.dll (UI)、gdi32.dll (繪圖) 構成 Windows API 基石。MessageBox 即導出自 user32.dll。CObject 派生),僅限 MFC 應用調用。創建步驟:
LibMath。Math.h / Math.cpp:
// Math.h
#ifndef MATH_H
#define MATH_H
extern "C" int Add(int a, int b); // C 鏈接,防止名稱修飾
#endif
// Math.cpp
#include "Math.h"
int Add(int a, int b) { return a + b; }
LibMath.lib。調用方使用:
// 方法 1:#pragma 指定庫路徑
#pragma comment(lib, "..\\Debug\\LibMath.lib")
#include "Math.h"
int main() { printf("%d", Add(2,3)); }
// 方法 2:項目屬性 → Linker → Additional Dependencies 添加 LibMath.lib
// → Additional Library Directories 添加.lib 目錄
Depends.exe (Dependency Walker) 打開 DLL,紅框顯示導出函數、序號、裝飾名稱。系統 DLL 同理可查。
建議:每節必動手建專案,對照 Depends 查看導出表,用調試器步入 DllMain 與導出函數。