2016-03-08 15 views
0

Я пишу настольное приложение C++ для Windows 7 и более поздних версий.
Я хочу, чтобы получить путь к папке AppData/Roaming папки, поэтому я использую SHGetKnownFolderPath:Целевое назначение рабочего стола Windows 7: идентификатор «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, где проблема заключается в том, что запрашивающая сторона больше, чем на рабочем столе.
+0

Ваши [целевые платформы-макросы] (https://msdn.microsoft.com/en-us/library/6sehtctf.aspx) в заголовке stdafx.h, вероятно, будут важны для этого вопроса, так как их значения укажите, какие функции отображаются при компиляции через заголовки. Может захотеть включить их в ваш вопрос. – WhozCraig

+0

@WhozCraig: Добавлено! Проблема синтаксиса StackOverflow: -/ –

+1

Поскольку он сидит сейчас после обновления вашего сообщения, он должен хотя бы скомпилировать источник. У вас есть этот заголовок stdafx.h в вашем проекте. Существует мало смысла не просто менять ценности на правильные цели прямо там, так как он включен во все ваши единицы перевода в любом случае. – WhozCraig

ответ

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 для наконечника!