Ориентация на рабочий стол Windows 7: идентификатор & quot; SHGetKnownFolderPath & quot; не определено

Я пишу настольное приложение 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, что странно, так как я думаю, что я включил правильные заголовки.


Заметки:

  • 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" неопознан где проблема в том, что спрашивающий нацеливается больше, чем на рабочий стол.

0

Решение

Хитрость заключается в том, чтобы добавить эти две строки в ваш 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 за совет!

1

Другие решения

Других решений пока нет …