在 MFC/Windows 開發中,「隱式鏈接」(靜態載入,通過 .lib 導入庫)與「顯式鏈接」(動態載入,LoadLibrary/GetProcAddress)是兩種根本不同的 DLL 使用方式,選擇取決於編譯期是否確定依賴與靈活性需求。
隱式鏈接(推薦預設)
- 適用場景:系統 API、MFC、CRT、第三方穩定庫(如 OpenSSL、Boost),這些庫編譯時就存在,版本固定,需高效調用。
- 優勢:載入速度快,調用開銷極小(直接跳轉),IDE 智能提示完整,部署只需帶上 DLL。
- 缺點:啟動時若 DLL 缺失直接崩潰;無法延遲載入或熱插拔。
顯式鏈接(按需使用)
- 適用場景:插件系統(編譯時未知具體插件)、向後兼容新版 API(舊環境無導入庫)、可選功能模組(如編碼器、加密算法)需按需載入。
- 優勢:運行時決定載入哪個 DLL,支援熱更新、降級容錯、減少啟動依賴。
- 缺點:代碼繁瑣(函數指針轉換)、無類型檢查、調用有微小開銷、調試困難。
決策口訣
「核心依賴用隱式,插件擴展用顯式;不確定有無用顯式,追求極致效能用隱式。」