VC6 時代習慣的 DLL 隱式加載(靜態鏈接)方式,在 VS2005/2008/2010/2012/2013/2015/2017/2019/2022 中配置後鏈接失敗,提示「無法解析的外部符號」。
__declspec(dllexport)。.dll、.lib(導入庫)、.h(頭文件)。#include "MyDll.h"。| 錯誤現象 | 原因 | 解決 |
|---|---|---|
| LNK2019: 無法解析的外部符號 | 未添加 .lib 到 Additional Dependencies,或路徑錯誤 | 檢查 Linker → Input → Additional Dependencies 及 Library Directories |
| LNK1104: 無法打開文件 'MyDll.lib' | Library Directories 路徑不含 .lib 所在文件夾 | 添加正確的 .lib 目錄絕對路徑或相對路徑 $(SolutionDir)..\lib\ |
| 運行時提示「找不到 MyDll.dll」 | DLL 未放在可搜索路徑 | 複製 DLL 到輸出目錄 $(OutDir) 或設置 PATH 環境變量 |
| 調試時斷點不生效/變量顯示錯誤 | PDB 文件不匹配或未複製 | 確保 .pdb 與 .dll 同目錄,或設置符號文件路徑 |
/LIBPATH, /DEFAULTLIB)邏輯一致。/MT, /MTd, /MD, /MDd),否則會導致堆損壞、內存洩漏等難查問題。專案屬性 → C/C++ → Code Generation → Runtime Library 必須一致。extern "C" 避免名稱修飾導致鏈接找不到符號。VC6 後隱式加載 DLL 核心邏輯未變:頭文件聲明 + .lib 鏈接 + .dll 運行時加載。失敗 99% 為「庫目錄未加」、「.lib 未加入依賴」、「Runtime Library 不一致」三大原因。逐項核對專案屬性頁即可解決。