编译将ATL项目从vs2010升级到vs2013的错误

CCo*_*ron 6 c++ atl visual-studio-2010 visual-studio-2013

当从Visual Studio 2013中的Microsoft ATL库中包含atlwin.h时,可能会导致许多关于未定义元素的编译器错误.

HMONITOR is not defined
Run Code Online (Sandbox Code Playgroud)

使用VS2010构建时不会发生这种情况.

由于这是一个标准的MS头文件,因此缺少的类错误似乎没有意义.

CCo*_*ron 7

由于这是一个非常古老的遗留项目,因此问题在于stdafx.h文件中的目标Windows版本

来自MSDN

Visual C++不再支持Windows 95,Windows 98,Windows ME或Windows NT.如果将WINVER或_WIN32_WINNT宏分配给其中一个版本的Windows,则必须修改宏.升级使用早期版本的Visual C++创建的项目时,如果将它们分配给不再受支持的Windows版本,则可能会看到与WINVER或_WIN32_WINNT宏相关的编译错误.

所以,改变

#ifndef WINVER  
#define WINVER 0x0400   
#endif
Run Code Online (Sandbox Code Playgroud)

#ifndef WINVER  
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#endif
Run Code Online (Sandbox Code Playgroud)

纠正了构建问题