【问题标题】:After installing VS2008, I get a compile error in winnt.h安装VS2008后,winnt.h出现编译错误
【发布时间】:2010-01-29 15:44:51
【问题描述】:

我正在尝试将我们的项目从 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

谢谢

【问题讨论】:

    标签: visual-studio-2008 mfc


    【解决方案1】:

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

    解决方案是在有问题的项目的添加包含设置中将包含目录添加到SDK。如:

    "$(WindowsSdkDir)\include"
    

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

    "$(VCInstallDir)PlatformSDK\include"
    

    VS2008中不再是平台SDK的位置

    【讨论】:

    • 我在使用 DirectShow 和 VS2008 时遇到了同样的问题。但不幸的是,即使我安装了更新的 MS SDK 版本 6.0、7.0,您的解决方案也无济于事。有什么建议吗?
    【解决方案2】:

    在使用 VS2005 安装 VS2012RC(而不是问题的 VS2008)后,我遇到了这个确切的问题。卡里姆对这个问题的回答大多是正确的,但他的解决方案对我不起作用。幸运的是,这里的其他人已经解决了这个问题。

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

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

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

    这个修复也很可能适用于 Karim 的情况,让他避免使用额外的 #include 预处理器语句。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-08-16
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 2010-09-20
        相关资源
        最近更新 更多