atlwin.h中的编译器错误

时间:2013-12-01 16:03:01

标签: c++ atl wtl

在Visual Studio 2013构建中包含来自Microsoft ATL库的atlwin.h时,会导致许多关于未定义元素的编译器错误。

#include <atlwin.h>
class MainWnd : public CWindowImpl<MainWnd>
{};
  

“CWindowImpl:未定义基类”错误。

  

未定义HMONITOR

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

我该如何解决?

2 个答案:

答案 0 :(得分:7)

问题在于stdafx.h文件中的目标Windows版本

来自MSDN

  

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

所以,改变

#ifndef WINVER  
#define WINVER 0x0400   
#endif

#ifndef WINVER  
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#endif

纠正构建问题

答案 1 :(得分:4)

{p> CWindowImpl<atlwin.h>中定义,因此您需要包含该内容。我不知道您所包含的文件atldwin.h是什么,但显然它不包含该类。

编辑:根据CCondron下面的评论,这是由于Visual C ++不再支持Windows的目标版本。要修复,请添加:

#define WINVER 0x0500 
#define _WIN32_WINNT 0x0500