目标Windows 7桌面:标识符" SHGetKnownFolderPath"未定义

时间:2016-03-08 04:01:09

标签: c++ visual-studio-2015 header-files appdata shell32.dll

我正在为Windows 7及更高版本编写一个C ++桌面应用程序 我想获取AppData / Roaming文件夹的路径,因此我使用SHGetKnownFolderPath

#include "stdafx.h"
#include <windows.h>
#include <ShlObj.h>

void hello()
{
    LPWSTR roamingPath;
    SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &roamingPath);

问题:使用identifier "SHGetKnownFolderPath" is undefined构建失败,这很奇怪,因为我认为我包含了正确的标题。

注意:

  • Visual Studio 2015告诉我,我的编译选项是/Yu"stdafx.h" /GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /Fd"Debug\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_USRDLL" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\OverlayIcon.pch"
  • Error: identifier :"SHGetKnownFolderPath" is unidentified不同,问题在于提问者的目标不是桌面。

1 个答案:

答案 0 :(得分:1)

诀窍是在stdafx.h文件中添加这两行:

#define WINVER 0x0601 // Allow use of features specific to Windows 7 or later.
#define _WIN32_WINNT 0x0601

这表示应用程序的目标是Windows 7,这很重要,因为SHGetKnownFolderPath只能从Windows Vista中获得,如MSDN documentation中所述。它不能立即为我工作,我不得不清理,甚至重新启动Visual Studio。

以下是所有其他Windows版本的代码:
https://msdn.microsoft.com/en-us/library/6sehtctf.aspx

感谢WhozCraig的提示!