Я пишу настольное приложение C ++ для Windows 7 и более поздних версий.
Я хочу получить путь к папке 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
, что странно, так как я думаю, что я включил правильные заголовки.
Заметки:
/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"
,Хитрость заключается в том, чтобы добавить эти две строки в ваш 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 за совет!
Других решений пока нет …