首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2010 專案遷移 VS2015 編譯錯誤:平台工具集回退大法

     編輯:程式設計綜合問答

錯誤現象

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 頭文件不兼容。

最快解決:切換平台工具集回 VS2010 (v100)

  1. 確保電腦安裝了 **VS2010**(或至少安裝了 VS2010 Build Tools / Windows 7.1 SDK)。
  2. 專案右鍵 → Properties(屬性)。
  3. Configuration Properties → General → Platform Toolset。
  4. 下拉選擇 Visual Studio 2010 (v100) → Apply → OK。
  5. 重新編譯,錯誤消失。

原理

Platform Toolset 決定編譯器版本、標準庫、Windows SDK 版本、ATL/MFC 版本。選 v100 即使用 VS2010 完整工具鏈編譯,繞過 VS2015 新 SDK 引入的破壞性變更。

進階方案(不想裝 VS2010)

  1. 安裝 Windows 7.1 SDK:VS2015 安裝程式中勾選「Windows 8.1 SDK and UCRT SDK」或單獨安裝 Win 7.1 SDK,然後工具集選 Visual Studio 2015 - Windows XP (v140_xp)(內部鏈接舊版 SDK)。
  2. 修改代碼適配新 SDK:
    • 在 #include <atlcore.h> 前定義 _WIN32_WINNT 0x0601 (Win7) 或更高。
    • 手動加載 kernel32.dll 並 GetProcAddress 獲取 SetDefaultDllDirectories,動態調用。
    • 或直接移除觸發錯誤的 ATL 代碼路徑(如不使用 DLL 搜尋順序控制)。
  3. 升級專案代碼:將舊 ATL/MFC 代碼重構為現代 C++/WinRT/標準庫,徹底擺脫工具集綁定(長期最優)。

工具集選擇對照表

工具集編譯器標準庫Windows SDK適用場景
v140 (VS2015)MSVC 19.0STL (C++14/17)Win 10 SDK新專案、現代 C++
v140_xpMSVC 19.0STLWin 7.1 SDK需支援 XP/Win7、不想裝 VS2010
v120 (VS2013)MSVC 18.0STL (C++11/14)Win 8.1 SDKVS2013 專案遷移
v100 (VS2010)MSVC 16.0STL (C++03/11 部分)Win 7.1 SDK舊專案零修改編譯

避坑提醒

  • 切換工具集後,**清理解決方案** 再重建,避免殘留舊目標文件干擾。
  • 若專案依賴第三方靜態庫,該庫也必須用相同工具集重新編譯,否則鏈接報錯(Mismatched _MSC_VER)。
  • 長期維護專案請制定**工具集升級計劃**,逐步適配新 SDK,而非永久停留在 v100。

「知其然不知其所以然」是權宜之計,掌握 Platform Toolset 機制,才能在版本遷移中游刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved