安装VS2008后,我在winnt.h中遇到编译错误

时间:2010-01-29 15:44:52

标签: visual-studio-2008 mfc

我正在尝试将我们的项目从VS2005移到VS2008,并在MFC项目中运行此构建错误:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winnt.h(236) : error C2146: syntax error : missing ';' before identifier 'PVOID64'

我认为这是一个SDK问题或包含目录排序问题,正如一些论坛所建议的那样但似乎不是问题。谁看过这个吗?在试图追踪这个时,我应该寻找什么?

我也想知道是否需要在项目的stdafx中增加WINVER预处理器标志。他们很老了:

#ifndef WINVER              
#define WINVER 0x0500       
#endif

#ifndef _WIN32_WINNT        
#define _WIN32_WINNT 0x0500
#endif                      

#ifndef _WIN32_WINDOWS  
#define _WIN32_WINDOWS 0x0510 
#endif

#ifndef _WIN32_IE           
#define _WIN32_IE 0x0500    
#endif

由于

3 个答案:

答案 0 :(得分:3)

这仅在包含DirectShow包含文件的项目中发生。问题是,在包含Windows SDK的Basetsd.h之前,有一个Basetsd.h是DirectShow SDK的一部分。 DirectShow版本没有定义POINTER_64(因为它已经过时),然后导致我报告的问题。

解决方案是在违规项目的添加包含设置中将include目录添加到SDK。如:

"$(WindowsSdkDir)\include"

这是在我从VS2005升级到VS2008之后开始发生的,因为之前的SDK包含指令是:

"$(VCInstallDir)PlatformSDK\include"

这不再是VS2008中平台SDK的位置

答案 1 :(得分:1)

在使用VS2005安装VS2012RC(而不是问题的VS2008)后,我遇到了这个问题。卡里姆的答案主要是关于这个问题的答案,但他的解决方案并不适用于我。幸运的是,在这里工作的其他人已经解决了这个问题。

问题似乎是VS安装程序找到了DirectX9 SDK并将其放在每个用户目录的“属性”文件中。因此,对我们有用的修复是编辑用户的目录属性文件(使用文本编辑器),删除对“dx90sdk”目录的所有引用,然后重新加载Visual Studio。

有问题的文件似乎存储在:

%USERPROFILE%\appdata\local\microsoft\msbuild\v4.0\Microsoft.Cpp.Win32.user.props

此修复程序也可能适用于Karim的情境,允许他避免使用额外的#include预处理程序语句。

答案 2 :(得分:0)

您应该尝试从stdafx.h中删除那些 WINVER 宏。那些版本(5.0和5.1)早于Win64,所以他们可能没有PVOID64的声明。