C++ WinSDK 头文件编译错误

标签 c++ windows visual-studio-2010

我正在尝试在 Windows 7 中的 Visual Studio 2010 中编译程序。我在 Windows header shlobj.h 中收到编译错误 C2061: syntax error: identifier 'KNOWN_FOLDER_FLAG'在标记线处:

#if (NTDDI_VERSION >= NTDDI_VISTA)

typedef enum
{
    KF_FLAG_DEFAULT         = 0x00000000,
    KF_FLAG_CREATE          = 0x00008000,
    KF_FLAG_DONT_VERIFY     = 0x00004000,
    KF_FLAG_DONT_UNEXPAND   = 0x00002000,
    KF_FLAG_NO_ALIAS        = 0x00001000,
    KF_FLAG_INIT            = 0x00000800,
    KF_FLAG_DEFAULT_PATH    = 0x00000400,
    KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200,
    KF_FLAG_SIMPLE_IDLIST   = 0x00000100,
    KF_FLAG_ALIAS_ONLY      = 0x80000000,
} KNOWN_FOLDER_FLAG;


DEFINE_ENUM_FLAG_OPERATORS(KNOWN_FOLDER_FLAG);

STDAPI SHGetKnownFolderIDList(__in REFKNOWNFOLDERID rfid,
                              __in DWORD /* KNOWN_FOLDER_FLAG */ dwFlags,
                              __in_opt HANDLE hToken,
                              __deref_out PIDLIST_ABSOLUTE *ppidl);

STDAPI SHSetKnownFolderPath(__in REFKNOWNFOLDERID rfid,
                            __in DWORD /* KNOWN_FOLDER_FLAG */ dwFlags,
                            __in_opt HANDLE hToken,
                            __in PCWSTR pszPath);

STDAPI SHGetKnownFolderPath(__in REFKNOWNFOLDERID rfid,
                            __in DWORD /* KNOWN_FOLDER_FLAG */ dwFlags,
                            __in_opt HANDLE hToken,
                            __deref_out PWSTR *ppszPath);

#endif  // NTDDI_VISTA

#if (NTDDI_VERSION >= NTDDI_WIN7)

STDAPI SHGetKnownFolderItem(__in REFKNOWNFOLDERID rfid,
                            __in KNOWN_FOLDER_FLAG flags, <<<ERROR AT THIS LINE
                            __in_opt HANDLE hToken,
                            __in REFIID riid,
                            __deref_out void **ppv);
#endif // NTDDI_WIN7

在我的程序中版本宏定义如下

#define NTDDI_VERSION NTDDI_WINXP

编译不通过的原因是什么?

在我看来,我遇到错误的部分根本不能编译,但它以某种方式编译了。

最佳答案

只有一个合乎逻辑的结论:出于某种原因,编译此 header 时 NTDDI_VERSION 的扩展不是您认为的那样。

尝试通过搜索 #undef NTDDI_VERSION 进行故障排除并重新构建您的项目(如果您使用的是预编译 header ,则可能相关)。

关于C++ WinSDK 头文件编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738357/

相关文章:

c++ - 在递归/另一个函数中返回静态/普通数组

c++ - 引用指针(int * const和arg)

c++ - 在 C++ 中的 Windows 串行端口上设置 low_latency 标志

windows - Windows 的 CVDisplayLink 替代品?

c++ - winbio.h 头文件功能被禁用?

c++ - 无法在 visual studio 2010 中使用函数 posix_memalign

c++ - 如何为 double 编写一个包装器以与 boost 序列化一起使用?

python - 我如何调试双语言程序?

visual-studio-2010 - 如何设置我的 git 存储库以便能够轻松地在 Visual Studio 中重用项目

c# - 运行Asp.Net 网站项目时,如何在Visual Studio 2010 中禁用脚本调试?