C++ 如何避免控制台输出不受支持的操作?(IWebBrowser2,DISP_E_MEMBERNOTFOUND)

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

背景: 我正在尝试使用IWebBrowser2创建一个用于查看本地html文件的小型嵌入式浏览器。我是在MFC和CWnd::CreateControl的帮助下完成这项工作的。一切顺利,除了一个时刻:当我点击HTML链接,我收到消息(Visual C++调试控制台)关于CyeExcel已经被抛出。浏览器可以很好地打开链接,并且除了控制台中的消息之外,没有其他可观察到的效果
我能找到投掷的地方。有调用堆栈:

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不存在,并且

嗨!非常感谢您的回答,第二个解决方案很好地解决了我的问题。它有一个小缺点:基于IWebBrowser2的控件(对话框等)的所有主机都应该实现CreateControlSite方法。在我的基于IWebBuffSer2的控件中,是否有任何封装CeaCealTrand的变体?您可以从C对话框中派生一个类,并在其中添加CealEngRealStand实现,然后使用类作为对话框的基类。谢谢你的帮助。 AfxThrowOleException(...) COleDispatchDriver::InvokeHelperV(...) COleControlSite::InvokeHelperV(...) COleControlSite::InvokeHelper(...) COleControlSite::GetProperty(...) COleControlSite::GetStyle(...) CWnd::GetStyle(...) CWnd::OnDisplayChange(...) CWnd::OnSettingChange(...) CWnd::OnWndMsg(...) CWnd::WindowProc(...) AfxCallWndProc(...) CWnd::SendMessageToDescendants(...)CWnd::SendMessageToDescendants(...) CWnd::OnDisplayChange(...) CWnd::OnSettingChange(...) CDialog::OnSettingChange(...) CWnd::OnWndMsg(...) CWnd::WindowProc(...) AfxCallWndProc(...) AfxWndProc(...) Warning: constructing 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