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

typedef void *PVOID;
typedef void * POINTER_64 PVOID64;


struct {
    DWORD crc;
    BYTE  rgbReserved[14];
} CRC;

那么,这可能是什么原因呢? winnt.h是标准头文件,尚未修改。使用VS 2010或使用64位Windows与它有关吗?还是需要某种配置?

编辑:
以下是确切的错误代码:
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 ';'

最佳答案

您需要包括windows.h而不是winnt.h。当您包含windows.h时,它将依次包含winnt.h。您需要通过这种方式来放置编译winnt.h所需的必要宏。

在这种情况下,POINTER_64是在BaseTsd.h中定义的,如下所示:

#define POINTER_64 __ptr64

但是,如果您在包含winnt.h之前先添加windows.h,则未定义POINTER_64

09-30 11:48