Одновременное использование IFileDialog и SHBrowseForFolder в C++

У меня проблема со вчерашнего утра, которая уже сводит меня с ума.

Проблема в том, что я хочу создать диалог для поиска папки. Для каждой ОС старше Vista я использую метод SHBrowseForFolder(), который отлично работает (также для Vista и новее).

Для Vista и новее я хотел бы использовать IFileDialog из-за производительности, более приятного графического интерфейса и т. д.

Когда я пытаюсь скомпилировать реализованный код для IFileDialog, я получаю следующую ошибку «Нет GUID»:

Код:

IFileDialog *pfd = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));

Ошибка:

error C2787: 'IFileDialog' : no GUID has been associated with this object

В разговоре с моим начальником он сказал мне, что мы не можем установить флаг компилятора на Vista и выше из-за совместимости с XP. Проблема была решена здесь с установкой флага компилятора: from-vc-6-0">Как использовать iFileDialog в проекте VC++ 2010, преобразованном из VC++ 6.0?

Можно ли в любом случае использовать IFileDialog? Может быть, класс можно связать динамически?

Не подскажете, как реализовать? Заранее спасибо.


person danny187    schedule 24.07.2015    source источник


Ответы (2)


Вам нужно использовать __uuidof(...) для создания этого объекта:

IFileDialog *pFileDialog;
hr = CoCreateInstance(__uuidof(FileDialog), NULL, CLSCTX_ALL, 
    __uuidof(pFileDialog), reinterpret_cast<void**>(&pFileDialog));
person codencandy    schedule 24.07.2015
comment
Спасибо за ваш ответ, но этот код дает мне ту же ошибку :( - person danny187; 24.07.2015

Если вы хотите компилировать код, использующий SDK более высокого уровня (после XP), вам необходимо установить соответствующий WINVER.

Выполнение этого для всего проекта не сработает, но сделать это для этого модуля, который должен работать для более поздней версии ОС Windows, чем XP, должно сработать.

Установка более высокой версии WINVER, чем XP, для одного из модулей не должна быть проблемой, если вы не используете функции, недоступные в XP.

person xMRi    schedule 24.07.2015
comment
Подскажите, пожалуйста, где установить WINVER и с каким кодом? Спасибо. - person danny187; 24.07.2015