我最近在应用程序上获得了源代码。当我尝试构建解决方案时,在包含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
。