如何在从VC ++ 6.0转换的VC ++ 2010项目中使用iFileDialog?

我可以像这样在VC ++ 2010应用程序中使用FileSaveDialog(Common Item Dialog):

IFileDialog *pFileDialog; HRESULT hr = CoCreateInstance(CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pFileDialog)); 

但是当我把这个代码放到我从VC ++ 6.0转换到VC ++ 2010的项目中时,出现以下错误:

“错误C2787:”IFileDialog“:没有GUID已与此对象关联”

IID_PPV_ARGSmacros和float-over错误下,我也得到一个红色的IID_PPV_ARGS

“_uuidof的操作数必须具有指定了_declspec(uuid('…'))的类或枚举types”

我没有在任何一个项目中使用公共语言运行时支持(/ clr)。

如何将GUID与我的对象关联?

Solutions Collecting From Web of "如何在从VC ++ 6.0转换的VC ++ 2010项目中使用iFileDialog?"

问题是我已经设置了一个针对Win XP操作系统的编译器标志。 这就是为什么没有定义在Vista中引入的功能。

我有_WIN32_WINNT = 0x0501 (WinXP)。 当我将其更改为0x0600 (Vista)时,定义了IFileDialog。

马克,关于查看IFileDialog的定义的建议引导我的原因。 它把我带到了ShObjIdl.h文件,但是定义了IFileDialog的那部分是灰色的,导致我达到了#if (NTDDI_VERSION >= NTDDI_VISTA)条件。

谢谢!

我的VC ++ 6.0没有定义IFileDialog,不在基础包中,也不在Windows SDK中。 你从什么地方回来了吗?

我会看看在VC + + 10中的IFileDialog的定义。我猜它定义与一些宏的好处,该宏包括或排除_declspec(uuid('...'))取决于一些编译时常量这是错误的。

编辑:在VC ++ 10中IFileDialog是在ShObjIdl.h中的MIDL_INTERFACE宏的帮助下定义的。 MIDL_INTERFACE宏定义在3个不同的文件中,所以很难判断你正在拾取哪个定义。 他们都是不同的。 但是我没有看到定义不会与GUID关联的任何方式。

是否有可能你自己做一个IFileDialog的前瞻性定义,不包括GUID?