语法错误:缺少';' 在编译winnt.h时在标识符'PVOID64'之前

Joh*_*now 11 c++ windows visual-studio-2010

我最近在应用程序上获得了源代码.当我试图构建解决方案时,我在winnt.h包含的所有部分都会收到错误.错误代码略有不同,但它们始终指向winnt.h中的这些行:

typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
Run Code Online (Sandbox Code Playgroud)

struct {
    DWORD crc;
    BYTE  rgbReserved[14];
} CRC;
Run Code Online (Sandbox Code Playgroud)

那么,原因可能是什么?winnt.h是标准头文件,尚未修改.是否与使用VS 2010或使用64位窗口的我有关?还是需要某种配置?

编辑:这是确切的错误代码:

1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C2146: syntax error : missing ';' before identifier 'Buffer'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11525): error C2059: syntax error : 'constant'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11525): error C2238: unexpected token(s) preceding ';'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11556): error C2059: syntax error : 'constant'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11556): error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 11

你需要包括windows.h而不是winnt.h.当你包括windows.h它时,反过来,包括winnt.h.您需要以这种方式执行此操作,以便编译所需的宏winnt.h.

在这种情况下,POINTER_64定义BaseTsd.h如下:

#define POINTER_64 __ptr64
Run Code Online (Sandbox Code Playgroud)

但是,如果你包括winnt.h之前包括windows.h然后POINTER_64没有定义.


jam*_*345 7

如果您使用的是DirectX SDK,请尝试更改最后搜索的include和lib的VC++目录.

  • 实际上,我不得不做相反的事情(除非我准备让你回答不正确)。我不得不将 SDK 包含/可执行文件/库目录实例放在标准的包含/可执行文件/库目录实例之后:即 **ExecutableDirectories:* * `$(ExecutablePath);C:\DXSDK\bin` (2认同)
  • @BrettCaswell 所指出的一点都是正确的。如果您碰巧使用属性表,则必须执行此操作才能正确包含 DirectX 目录。确保它是 **`$(IncludePath);$(DXSDK_DIR)Include`** 而不是 `$(DXSDK_DIR)Include;$(IncludePath)` (2认同)