我試圖在Visual Studio 2010中編譯程序在Windows 7我得到一個編譯錯誤C2061:語法錯誤:在Windows頭shlobj.h
標識符「KNOWN_FOLDER_FLAG」在標線:C++ WinSDK頭編譯錯誤
#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
在我的程序版本宏定義爲folows
#define NTDDI_VERSION NTDDI_WINXP
有什麼可以爲它不能編譯的原因嗎?
在我看來,我得到錯誤的部分一定不能編譯,但它不知道怎麼做。
你是如何包括SHLOBJ.H聲明ShlObj頭 做工精細 - 直接或間接?某些Windows頭文件需要通過windows.h間接包含才能正確編譯。有些你可以直接包含,但只有你首先包含windows.h。在你的代碼中,什麼使得你現在擁有的包含? – Dabbler
我使用MFC,我推測它包含shlobj.h文件。 – grzkv