atlcore.h(644): error C2039: “SetDefaultDllDirectories”: 不是 “global namespace” 的成員 atlcore.h(644): error C2065: “SetDefaultDllDirectories”: 未聲明的標識符 atlcore.h(646): error C2065: “LOAD_LIBRARY_SEARCH_SYSTEM32”: 未聲明的標識符
原因:VS2015 (v140) 預設使用 Windows 10 SDK,引入了新的 DLL 搜尋順序 API(SetDefaultDllDirectories 等),但專案代碼/舊版 ATL 頭文件不兼容。
Platform Toolset 決定編譯器版本、標準庫、Windows SDK 版本、ATL/MFC 版本。選 v100 即使用 VS2010 完整工具鏈編譯,繞過 VS2015 新 SDK 引入的破壞性變更。
#include <atlcore.h> 前定義 _WIN32_WINNT 0x0601 (Win7) 或更高。kernel32.dll 並 GetProcAddress 獲取 SetDefaultDllDirectories,動態調用。| 工具集 | 編譯器 | 標準庫 | Windows SDK | 適用場景 |
|---|---|---|---|---|
| v140 (VS2015) | MSVC 19.0 | STL (C++14/17) | Win 10 SDK | 新專案、現代 C++ |
| v140_xp | MSVC 19.0 | STL | Win 7.1 SDK | 需支援 XP/Win7、不想裝 VS2010 |
| v120 (VS2013) | MSVC 18.0 | STL (C++11/14) | Win 8.1 SDK | VS2013 專案遷移 |
| v100 (VS2010) | MSVC 16.0 | STL (C++03/11 部分) | Win 7.1 SDK | 舊專案零修改編譯 |
Mismatched _MSC_VER)。「知其然不知其所以然」是權宜之計,掌握 Platform Toolset 機制,才能在版本遷移中游刃有餘。