SHGetFolderPath ': идентификатор не найден - PullRequest
1 голос
/ 13 октября 2011

Я делаю пример, используя DirectX 9 On Vs 2008 / windows7. Я получаю ошибку.

1> ------ Началась сборка: Проект: VideoCapture, Конфигурация: Отладка Unicode Win32 ------ 1> Компиляция ...

1> VideoCaptureDlg.cpp
1>. \ VideoCaptureDlg.cpp (169): ошибка C2065: 'SHGFP_TYPE_CURRENT': необъявленный идентификатор
1>. \ VideoCaptureDlg.cpp (169): ошибка C3861: «SHGetFolderPath»: идентификатор не найден
1>. \ VideoCaptureDlg.cpp (173): ошибка C2065: 'SHGFP_TYPE_CURRENT': необъявленный идентификатор
1>. \ VideoCaptureDlg.cpp (173): ошибка C3861: «SHGetFolderPath»: идентификатор не найден
1>. \ VideoCaptureDlg.cpp (1025): предупреждение C4244: «аргумент»: преобразование из «int» в «WORD», возможная потеря данных
1>. \ VideoCaptureDlg.cpp (1180): ошибка C2065: 'SHGFP_TYPE_CURRENT': необъявленный идентификатор
1>. \ VideoCaptureDlg.cpp (1180): ошибка C3861: «SHGetFolderPath»: идентификатор не найден
1>. \ VideoCaptureDlg.cpp (1184): ошибка C2065: 'SHGFP_TYPE_CURRENT': необъявленный идентификатор
1>. \ VideoCaptureDlg.cpp (1184): ошибка C3861: «SHGetFolderPath»: идентификатор не найден

Я добавил shlobj.h и shell32.lib, но все равно он показывает ту же ошибку.

Я попытался изменить значение следующего макроса в файле stdafx.h на основе Windows 7 и Internet Explorer 8, но он показывает конфликт "C1189: #error: _WIN32_WINNT конфликтует с настройкой _WIN32_IE"

// Обратитесь к MSDN для получения последней информации о соответствующих значениях для разных платформ.

#ifndef WINVER // Allow use of features specific to Windows XP or later.    
#define WINVER 0x0501 // Change this to the appropriate value to target other versions  of Windows.    
#endif    

#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.     
#define _WIN32_WINNT 0x0601 // Change this to the appropriate value to target other versions of Windows.    
#endif      

#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.     
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.    
#endif    

#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.    
#define _WIN32_IE 0x0800 // Change this to the appropriate value to target other versions of IE.    
#endif

Любые предложения по этому вопросу будут полезны.

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Кодовый блок из MSDN или stdafx.h? Я бы просто установил макросы, не беспокоясь об условных выражениях (вы хотите переопределить предыдущие настройки). Также убедитесь, что вы настраиваете их перед любыми включениями (особенно windows.h).

Просмотр источника сообщения об ошибке (строка 263 из sdkddkver.h):

#if ((_WIN32_WINNT < _WIN32_WINNT_WIN2K) && (_WIN32_IE > _WIN32_IE_IE60SP1))
#error _WIN32_WINNT settings conflicts with _WIN32_IE setting
#endif

вы не устанавливаете эти макросы так, как вы думаете.

РЕДАКТИРОВАТЬ (согласно комментариям):

Я бы запустил мой stdafx.h файл (и гарантировал, что всегда первый заголовок; это необходимо и для эффективных предварительно скомпилированных заголовков):

#define WINVER 0x0601     // Kernel 6.1 == Windows 7/Server 2008 R2
#define _WIN32_WINNT WINVER
#define _WIN32_IE 0x0800  // IE8

#define NOMINMAX          // Don't define min and max (prefer C++ lib)
0 голосов
/ 14 октября 2011

Проблема устранена.Я только что изменил настройку препроцессора в свойствах проекта -> c ++ ->

До того, как это было
_WINDOWS; WINVER = 0x0400; DEBUG; _DEBUG; _WIN32_WINNT = 0x400; WIN32; UNICODE

Я изменил его на
_WINDOWS; WINVER = 0x0600; ОТЛАДКА; _DEBUG; _WIN32_WINNT = 0x600; WIN32; UNICODE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...