在我们的32位Windows MFC应用程序中,我们使用IWebBrowser2来显示HTML内容。我们还(因为 MFC 为我们执行此操作,并且我们在 Windows 10 上运行)使用新的 IFileDialog COM 接口到通用文件打开对话框。
当我们在应用程序中显示 Web 浏览器窗口时,文件对话框将不会打开,或者将打开一次但永远不会再次打开,除非您运行应用程序并再次备份。通常发生的是此MFC调用:-
HRESULT hr = (static_cast<IFileDialog*>(m_pIFileDialog))->Show(m_ofn.hwndOwner);
只需返回"0x800704c7操作已被用户取消",甚至不显示对话框。
关闭 HTML 视图/窗口允许 IFileDialog 按预期工作,因此这两个组件似乎以某种方式相互干扰。
现在,我们几个月没有更改的软件正在发生这种情况,它似乎仅限于Windows 10,但是我们在网上找不到任何有关原因的线索。
大卫。
我有答案。 a) 你调用->Show()
的语法都是错误的。包含文件'shobjidl.h'
中的嵌套保护阻止了IFileDialog
COM 类定义的处理,因此许多人一直遇到编译错误,无法生成难以捉摸的输出.exe
基本上,调用 ->Show 方法时,您所需要的只是以下位置:
HRESULT hr = pFileDialog->Show(NULL);
请参阅以下说明和示例程序:
https://github.com/InventorDave/IFileDialog-gcc-Fix