0

我正在为 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".
  • 错误不同:标识符:“SHGetKnownFolderPath”未识别,问题在于提问者的目标不仅仅是桌面。
4

1 回答 1

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 文档中所述。它对我来说并没有立即起作用,我不得不清理甚至重新启动 Visual Studio。

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

感谢 WhozCraig 的提示!

于 2016-03-08T04:25:09.760 回答