我最近在应用程序上获得了源代码。当我尝试构建解决方案时,我在包含winnt.h
的所有部分都收到错误。错误代码略有不同,但它们总是指向winnt.h中的这些行:
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
和
struct {
DWORD crc;
BYTE rgbReserved[14];
} CRC;
那么,原因可能是什么? 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 ';'
答案 0 :(得分:10)
您需要包含windows.h
而不是winnt.h
。如果您加入windows.h
,则会包含winnt.h
。您需要以这种方式执行此操作,以便编译winnt.h
所需的必要宏。
在这种情况下,POINTER_64
在BaseTsd.h
中定义如下:
#define POINTER_64 __ptr64
但如果您在加入winnt.h
之前加入windows.h
,则POINTER_64
未定义。
答案 1 :(得分:7)
如果您使用的是DirectX SDK,请尝试更改最后搜索的include和lib的VC ++目录。
答案 2 :(得分:2)
看起来您的Windows SDK配置无效。 此错误是由编译器无法识别“POINTER_64”语句引起的。 您可以通过将'POINTER_64'替换为'__ptr64'来解决此问题。
我最近遇到了同样的问题。然后我重新安装了最新版本的Windows SDK,这解决了这个问题。
<强>更新强> @David Heffernan,正确指出一个应该包含windows.h而不是winnt.h
的事实答案 3 :(得分:2)
如果您有DirectX SDK,请尝试删除它。
答案 4 :(得分:1)
在winnt.h中手动修正语法:
typedef void * POINTER_64 PVOID64; => typedef void * POINTER_64, * PVOID64;
答案 5 :(得分:0)
如果您使用的是librdkafka,则只要包含“Windows.h”,您就会收到此错误。
我通过将“librdkafka / include / basetsd.h”重命名为其他名称或访问来修复它 这个库头通过子路径!
我认为这个库的作者使这个文件处理OS平台的兼容性。但是使用与Windows Core相同的文件名“basetsd.h”,它只会让Visual Studio感到困惑。