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

6

在Visual Studio 2013中使用Microsoft ATL库的atlwin.h时,可能会导致大量有关未定义元素的编译器错误。

HMONITOR is not defined

在使用VS2010构建时,不会出现这种情况。

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


只是一个注释:这似乎是一个合理的问题,并且可以回答。但是发布重复内容并不是解决问题的方式。如果您可以通过编辑来清理原始问题,那就太好了。这将“提升”它,以便它可以得到其余重新开放投票所需的支持。 - Cody Gray
感谢您抽出时间回复。我会等待它重新开放。 - CCondron
等待社区回应可能需要一些时间。只有那么多拥有重新开放投票特权的用户,他们必须看到问题,打开它,阅读它,评估它并投票。如果您想加快这个过程,可以尝试标记以引起管理员的注意。不能保证他们会同意您的请求。 - Cody Gray
他们不想重新打开另一个问题,因为他们担心我的编辑并不反映原始问题。因此,在这种情况下,这不是重复的问题,应该保持开放状态,或者它是一个重复的问题,那么另一个问题应该保持开放状态。 - CCondron
那是interjay对另一个问题的答案的评论。 - CCondron
显示剩余4条评论
1个回答

7
由于这是一个非常老的遗留项目,问题出现在stdafx.h文件中定位的窗口版本。根据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

to

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

修正构建问题


1
我在从2010年迁移到2015年的过程中遇到了这个问题。请注意,在2015年中,_WIN32_WINNT 0x0500 是行不通的,但是 #define _WIN32_WINNT _WIN32_WINNT_WINXP 可以使用。感谢您的帖子。 - lakeweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接