代码之家  ›  专栏  ›  技术社区  ›  Karim

在安装了VS2008之后,我在winnt.h中得到一个编译错误。

  •  2
  • Karim  · 技术社区  · 15 年前

    我正在尝试将我们的项目从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 回复  |  直到 12 年前
        1
  •  3
  •   Karim    14 年前

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

    解决方案是将include目录添加到有问题的项目的add include设置中的sdk。如:

    "$(WindowsSdkDir)\include"
    

    这是在我从VS2005升级到VS2008之后开始的,因为以前,sdk include指令的给出如下:

    "$(VCInstallDir)PlatformSDK\include"
    

    在VS2008中不再是Platform SDK的位置

        2
  •  1
  •   T.E.D.    12 年前

    在用vs2005安装vs2012rc(而不是问题的vs2008)之后,我遇到了这个确切的问题。卡里姆对这个问题的回答基本上是正确的,但他的解决方案对我不起作用。幸运的是,工作中的其他人已经解决了这个问题。

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

    相关文件似乎存储在:

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

    这个修复方法也可以很好地应用于Karim的位置,使他避免使用额外的 #include 预处理器语句。

        3
  •  0
  •   Michael    15 年前

    你应该试着去掉那些 温弗 来自stdafx.h的宏。这些版本(5.0和5.1)早于win64,因此它们可能没有pvoid64的声明。