自昨天早上以来,我遇到了一个问题,这现在使我发疯。

问题是我想创建一个对话框来浏览文件夹。
对于Vista之前的每个操作系统,我都使用SHBrowseForFolder()方法,该方法运行良好(也适用于Vista和更新版本)。

对于Vista和更高版本,由于性能,更好的GUI等原因,我想使用IFileDialog。

当我尝试为IFileDialog编译实现的代码时,出现以下“ No 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


在与老板的对话中,他告诉我,由于与XP兼容,我们无法将编译器标志设置为vista及更高版本。通过设置编译器标志可以解决此问题:How do I use iFileDialog in a VC++ 2010 project converted from VC++ 6.0?

是否可以使用IFileDialog?也许该类可以动态链接?

您能给我一些实施建议吗?
提前致谢。

最佳答案

您需要使用__uuidof(...)来创建此对象:

IFileDialog *pFileDialog;
hr = CoCreateInstance(__uuidof(FileDialog), NULL, CLSCTX_ALL,
    __uuidof(pFileDialog), reinterpret_cast<void**>(&pFileDialog));

10-07 18:19