C++ 在C+中同时使用IFileDialog和SHBrowseForFolder+;

C++ 在C+中同时使用IFileDialog和SHBrowseForFolder+;,c++,com,dialog,guid,folderbrowserdialog,C++,Com,Dialog,Guid,Folderbrowserdialog,从昨天早上开始我就有一个问题,现在快把我逼疯了 问题是我想创建一个对话框来浏览文件夹。 对于每一个比Vista旧的操作系统,我都使用SHBrowseForFolder()方法,该方法运行良好(同样适用于Vista和更高版本) 对于Vista和更新版本,由于性能、更好的GUI等原因,我希望使用IFileDialog 当我尝试编译IFileDialog的实现代码时,出现以下“No GUID”错误: 代码: 错误: error C2787: 'IFileDialog' : no GUID has be

从昨天早上开始我就有一个问题,现在快把我逼疯了

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

对于Vista和更新版本,由于性能、更好的GUI等原因,我希望使用IFileDialog

当我尝试编译IFileDialog的实现代码时,出现以下“No GUID”错误:

代码:

错误:

error C2787: 'IFileDialog' : no GUID has been associated with this object
在与老板的谈话中,他告诉我,由于XP的兼容性,我们不能将编译器标志设置为vista及以上。通过设置编译器标志解决了此问题:

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

你能给我一些关于如何实施的建议吗? 提前感谢。

您需要使用uu uuidof(…)来创建此对象:

IFileDialog *pFileDialog;
hr = CoCreateInstance(__uuidof(FileDialog), NULL, CLSCTX_ALL, 
    __uuidof(pFileDialog), reinterpret_cast<void**>(&pFileDialog));
IFileDialog*pFileDialog;
hr=CoCreateInstance(uuuuidof(FileDialog),NULL,CLSCTX_uall,
__uuidof(pFileDialog),重新解释铸造(&pFileDialog));
您需要使用u_uidof(…)来创建此对象:

IFileDialog *pFileDialog;
hr = CoCreateInstance(__uuidof(FileDialog), NULL, CLSCTX_ALL, 
    __uuidof(pFileDialog), reinterpret_cast<void**>(&pFileDialog));
IFileDialog*pFileDialog;
hr=CoCreateInstance(uuuuidof(FileDialog),NULL,CLSCTX_uall,
__uuidof(pFileDialog),重新解释铸造(&pFileDialog));

如果要编译使用更高SDK(XP后)的代码,需要设置相应的WINVER

在整个项目中这样做是行不通的,但是在这个模块中这样做应该比XP更适合运行Windows操作系统


只要您不使用XP中不可用的函数,将其中一个模块的WINVER设置为高于XP的版本应该不会有问题。

如果您希望编译使用更高SDK(XP后)的代码,则需要设置相应的WINVER

在整个项目中这样做是行不通的,但是在这个模块中这样做应该比XP更适合运行Windows操作系统


为其中一个模块将WINVER设置为高于XP的版本应该不会有问题,只要您不使用XP中不可用的功能。

谢谢您的回答,但该代码给了我相同的错误:(谢谢您的回答,但该代码给了我相同的错误:(您能告诉我在哪里设置WINVER和使用哪种代码吗?谢谢。您能告诉我在哪里设置WINVER和使用哪种代码吗?谢谢。