C++ 如何避免控制台输出不受支持的操作?(IWebBrowser2,DISP_E_MEMBERNOTFOUND)
背景: 我正在尝试使用IWebBrowser2创建一个用于查看本地html文件的小型嵌入式浏览器。我是在MFC和CWnd::CreateControl的帮助下完成这项工作的。一切顺利,除了一个时刻:当我点击HTML链接,我收到消息(Visual C++调试控制台)关于CyeExcel已经被抛出。浏览器可以很好地打开链接,并且除了控制台中的消息之外,没有其他可观察到的效果C++ 如何避免控制台输出不受支持的操作?(IWebBrowser2,DISP_E_MEMBERNOTFOUND),c++,com,mfc,activex,ole,C++,Com,Mfc,Activex,Ole,背景: 我正在尝试使用IWebBrowser2创建一个用于查看本地html文件的小型嵌入式浏览器。我是在MFC和CWnd::CreateControl的帮助下完成这项工作的。一切顺利,除了一个时刻:当我点击HTML链接,我收到消息(Visual C++调试控制台)关于CyeExcel已经被抛出。浏览器可以很好地打开链接,并且除了控制台中的消息之外,没有其他可观察到的效果 我能找到投掷的地方。有调用堆栈: AfxThrowOleException(…) COleDispatchDriver::I
我能找到投掷的地方。有调用堆栈:
AfxThrowOleException(…)
COleDispatchDriver::InvokeHelpPerv(…)
COleControlSite::InvokeHelperV(…)
COleControlSite::InvokeHelper(…)
COleControlSite::GetProperty(…)
COleControlSite::GetStyle(…)
CWnd::GetStyle(…)
CWnd::OnDisplayChange(…)
CWnd::OnSettingChange(…)
CWnd::OnWndMsg(…)
CWnd::WindowProc(…)
AfxCallWndProc(…)
CWnd::SendMessageToDescendats(…)CWnd::SendMessageToDescendats(…)
CWnd::OnDisplayChange(…)
CWnd::OnSettingChange(…)
CDialog::OnSettingChange(…)
CWnd::OnWndMsg(…)
CWnd::WindowProc(…)
AfxCallWndProc(…)
AfxWndProc(…)
经过一些调查,我知道MFC试图调用“Invoke”,以便IWebBrowser的IDispatch接收web浏览器控件的“ENABLED”状态。控件中的turn-through返回值告诉
这样的要求是不能满足的。MFC抛出异常(并自行捕获)并污染调试输出。问题:如何避免或抑制此消息 其他信息: 这是错误消息:
警告:构造COleException,scode=DISP_E_MEMBERNOTFOUND($80020003)。
RaiseException:Thread=9f84aba4 Proc=8c24c980'HtmlHelpBrowser.exe'
AKY=00000401 PC=03fb542c(coredll.dll+0x0004542c)RA=8000a700(NK.EXE+0x00009700)BVA=00000001 FSR=00000001
我在Visual C++ 9上在Windows CE 5上做这些事情。
原因:CyeCurrSt::GETSyLoE()检查Debug ID启用和DeIDIDBARDRADE样式,IE没有实现的两个调度ID。GetStyle调用就在调用堆栈上
解决方案:- 忽略调试输出,或
- 从COleControlSite派生类以重写GetStyle,复制COleControlSite::GetStyle的实现,但从ActiveX读取样式的行除外。然后在webbrowser的父窗口的类中,使用新的控件站点。对于VC6或更早版本,CWnd::CreateControlSite不存在,并且