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

VC++ 靜態庫與動態庫建立與使用完整指南

     編輯:VC 教學

一、靜態連結庫 (.lib)

建立步驟

  1. 新專案 → Win32 Static Library。
  2. 加入 .h/.cpp,編譯產生 Debug/MyLib.lib。
  3. 跨編譯器相容:標頭檔函數宣告加 extern "C" 強制 C 連結慣例,避免 C++ Name Mangling。

使用方法

  1. 複製 .lib、.h 至客戶專案。
  2. 專案設定 → Link → Object/library modules 加入 MyLib.lib (或相對路徑)。
  3. 原始碼 #include "MyLib.h" 直接呼叫。

二、動態連結庫 (.dll)

建立步驟

  1. 新專案 → Win32 Dynamic-Link Library。
  2. 加入原始碼,編譯產生 .dll、.lib (導入庫)。
  3. 匯出控制:
// 方法 1: __declspec(dllexport) (推薦)
__declspec(dllexport) int Add(int a, int b);

// 方法 2: .def 檔 (Resource Files 新增 .def)
LIBRARY "MyDll"
EXPORTS
    Add
    Subtract @2

使用方法一:隱式連結 (靜態載入)

  1. 複製 .dll、.lib、.h 到專案。
  2. Link 設定加入 .lib。
  3. #include "MyDll.h" 直接呼叫,載入器自動載入 DLL。

使用方法二:顯式連結 (動態載入)

無需 .lib,運行時決定載入。

typedef void (*PFN_FUNC)();
HMODULE hDll = LoadLibrary(_T("MyDll.dll"));
if (hDll) {
    PFN_FUNC pfn = (PFN_FUNC)GetProcAddress(hDll, "MyFunc");
    if (pfn) pfn();
    FreeLibrary(hDll);
}

三、關鍵差異總結

特性靜態庫動態庫 (隱式)動態庫 (顯式)
檔案.lib.dll + .lib.dll
程式碼複製連結時複製進 EXE運行時共享記憶體運行時手動載入
更新部署需重新編譯 EXE替換 DLL 即可替換 DLL 即可
相依性無需目標機有 DLL需目標機有 DLL
匯出 C++ 類別支援支援 (版本鎖定)極難 (需手動 GetProcAddress 裸函數指標)

四、常見陷阱

  • Debug/Release 混用:Debug/MyLib.lib 不能給 Release 專案用,CRT 版本不符會崩潰。
  • CRT 連結模式不一致:庫與 EXE 必須同為 /MT、/MTd、/MD、/MDd 其中之一。
  • __declspec(dllimport) 遺漏:客戶端標頭檔未切換為 dllimport 會產生額外指令碼雖能工作但效率略低。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved