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

Joe*_*der 6 windows com winapi visual-c++ visual-c++-2010

我可以在VC++ 2010应用程序中使用FileSaveDialog(Common Item Dialog),如下所示:

IFileDialog *pFileDialog;
HRESULT hr = CoCreateInstance(CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pFileDialog));    
Run Code Online (Sandbox Code Playgroud)

但是,当我将此代码放入已从VC++ 6.0转换为VC++ 2010的项目中时,我收到以下错误:

"错误C2787:'IFileDialog':没有与此对象关联的GUID"

我还在IID_PPV_ARGS宏下浮动错误和浮动错误:

"_uuidof的操作数必须有一个类或枚举类型,其中指定了_declspec(uuid('...'))"

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

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

Joe*_*der 5

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

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

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

谢谢!