VC++ 專案使用 DLL 有靜態連結(隱式)與動態載入(顯式)兩大類,共五種常見做法。本文比較各方法操作步驟、優缺點與適用場景。
// 執行期載入
HINSTANCE hDll = LoadLibrary(_T("MyLib.dll"));
if (hDll) {
typedef void (*PFUNC)();
PFUNC pFunc = (PFUNC)GetProcAddress(hDll, "MyFunction");
if (pFunc) pFunc();
FreeLibrary(hDll);
}
方案總管 → 專案右鍵 → Add → Existing Item → 選擇 MyLib.lib。
MyLib.lib。$(Configuration)、$(Platform),適合團隊專案。
// StdAfx.h 或任意通用標頭
#pragma comment(lib, "MyLib.lib")
#ifdef _DEBUG 區分)。| 方法 | 類型 | 需 .lib | 需 DLL 專案 | 載入時機 | 推薦場景 |
|---|---|---|---|---|---|
| LoadLibrary | 顯式 | 否 | 否 | 執行期 | 插件、選用模組、無原始碼 DLL |
| Project Dependencies | 隱式 | 是 | 是 | 啟動時 | 同方案內 DLL 專案 |
| Add .lib to Project | 隱式 | 是 | 否 | 啟動時 | 快速原型、單一專案 |
| Linker Settings | 隱式 | 是 | 否 | 啟動時 | **標準團隊專案** |
| #pragma comment | 隱式 | 是 | 否 | 啟動時 | 函式庫發布、跨專案共用 |
MyLib.h — 宣告 __declspec(dllimport) 函式/類別。MyLib.lib — 匯入庫,連結時解析符號。MyLib.dll — 執行期必須在 PATH 或應用程式目錄。__declspec(dllimport)。Dependency Walker 診斷。__stdcall,呼叫端預設 __cdecl;.h 需統一標註 CALLBACK 或 WINAPI。