atlwin.h中的编译器错误

Compiler Errors in atlwin.h

本文关键字:编译器 错误 atlwin      更新时间:2023-10-16

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

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

"CWindowImpl:基类未定义"错误。

HMONITOR未定义

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

我该怎么解决?

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

来自MSDN

Visual C++不再支持针对Windows 95、Windows 98、,Windows ME或Windows NT。如果您的WINVER或_WIN32_WINNT宏分配给其中一个版本的Windows时,必须修改宏。当您升级使用Visual C++的早期版本,您可能会看到与编译错误相关的如果WINVER或_WIN32_WINNT宏已分配给某个版本不再受支持的Windows的。

因此,改变

#ifndef WINVER  
#define WINVER 0x0400   
#endif

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

纠正构建问题

CWindowImpl是在<atlwin.h>中定义的,因此您需要包含它。我不知道您包含的文件atldwin.h是什么,但显然它不包含那个类。

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

#define WINVER 0x0500 
#define _WIN32_WINNT 0x0500