iWebBrowser ::在ole32.dll异常后导航死锁

时间:2016-07-01 13:51:27

标签: c++ mfc ole hang iwebbrowser2

我有一个与Windows嵌入式浏览器和COM相关的问题。我想要做的是以HTML格式向用户显示一些数据,因此我使用iwebbrowser2控件来实现此目的。

iwebbrowser2 Navigate崩溃后调用ole32.dll后,我有这种奇怪的死锁或挂在我的应用程序中。这个ole32崩溃随机发生在我的应用程序中。没有通常的地方或时间发生异常。它可能在应用程序执行开始时或稍后在使用应用程序时发生。工作的应用程序有几个运行的线程和一些无处不在的Windows工作线程。有一个名为WrapperThreadProc的特定线程,我不确定它在做什么但它在COM对象上调用CoUninitialize可能不再存在,可能导致{{1}上的异常(不确定这是否真的发生)。

这是异常发生时调用堆栈的图片 here are the pics of the call stack when the exception happens

,这是ole32.dll 之后发生死锁时调用堆栈的图片 and here is a pic of the call stack when the deadlock happens after navigate()

有没有人知道这个有线问题是怎么回事?我非常感谢你的帮助。

由于

1 个答案:

答案 0 :(得分:2)

我找到了问题的解决方案。事实证明,networkitemfactory.dll中存在一种竞争条件,会导致ole32.dll崩溃和卸载。如果在异常之后进行任何COM调用,例如" iwebbrowser2 :: navigate"然后应用程序将陷入僵局。微软发布了一个修补程序。这是文章support.microsoft.com/en-us/kb/2494427