我最近得到了一个应用程序的源代码。 当我尝试构build解决scheme时,在包含winnt.h
所有部分中出现错误。 错误代码有点不同,但是它们总是指向winnt.h中的这些行:
typedef void *PVOID; typedef void * POINTER_64 PVOID64;
和
struct { DWORD crc; BYTE rgbReserved[14]; } CRC;
那么,这可能是什么原因呢? winnt.h是一个标准的头文件,并没有被修改。 这与我使用VS 2010或使用64位窗口有什么关系? 还是需要某种configuration?
编辑:这是确切的错误代码:
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
但是,如果在包含windows.h
之前包含winnt.h
,则POINTER_64
未定义。
如果您使用的是DirectX SDK,请尝试更改VC ++目录中的include和lib以便最后搜索。
它看起来像你的Windows SDK的配置是无效的。 这个错误是由于编译器无法识别'POINTER_64'语句而引起的。 您可以通过用'__ptr64'替换'POINTER_64'来解决这个问题。
我最近有同样的问题。 然后我重新安装了最新版本的Windows SDK,并解决了这个问题。
UPDATE @David Heffernan正确地指出了一个事实,即应该包含windows.h而不是winnt.h
尝试删除DirectX SDK,如果你有。
这里接受错误: http : //connect.microsoft.com/VisualStudio/feedback/details/508204/vc10-0-errors-while-compiling-winnt-h
在winnt.h中手动更正了语法:
typedef void * POINTER_64 PVOID64; => typedef void * POINTER_64, * PVOID64;
如果你正在使用librdkafka,只要包含“Windows.h”就会得到这个错误。
我通过重命名“librdkafka / include / basetsd.h”将其修改为不同的名称,或通过子路径访问这个库头文件!
我觉得这个库的作者是这个文件来处理OS平台的兼容性。 但是与Windows Core具有相同的文件名“basetsd.h”,这只是令人困惑的Visual Studio。