我从昨天早上起就遇到了一个问题,现在让我发疯了。
问题是我想创建一个对话框来浏览文件夹。 对于早于Vista的每个操作系统,我使用SHBrowseForFolder()方法,该方法工作正常(对于Vista和更新版本)。
对于Vista和更新版本,我想使用IFileDialog因为性能,更好的GUI等。
当我尝试编译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吗?也许这个类可以动态链接?
请您就如何实施提出建议? 提前谢谢。
答案 0 :(得分:0)
您需要使用__uuidof(...)来创建此对象:
IFileDialog *pFileDialog;
hr = CoCreateInstance(__uuidof(FileDialog), NULL, CLSCTX_ALL,
__uuidof(pFileDialog), reinterpret_cast<void**>(&pFileDialog));
答案 1 :(得分:0)
如果你想编译使用更高版本SDK(XP后)的代码,你需要设置适当的WINVER。
为完整的项目执行此操作是行不通的,但是对于应该运行以后的Windows操作系统而不是XP的模块应该可以正常工作。
只要您不使用XP中没有的功能,将WINVER设置为比XP更高版本的其中一个模块应该是一个问题。