【问题标题】:iWebBrowser::Navigate Deadlock after a ole32.dll exceptionole32.dll 异常后的 iWebBrowser::Navigate 死锁
【发布时间】:2016-07-01 13:51:26
【问题描述】:

我有一个关于 Windows 嵌入式浏览器和 COM 的问题。我想要做的是在 HTML 表单中向用户显示一些数据,所以我使用 iwebbrowser2 控件来实现这一点。

ole32.dll 崩溃后调用iwebbrowser2 Navigate 后,我的应用程序出现了这种奇怪的死锁或挂起。这个 ole32 崩溃随机发生在我的应用程序中。异常发生的地点或时间并不常见。它可能在应用程序执行开始时或稍后在使用应用程序时发生。 o 工作的应用程序有几个正在运行的线程和一些突然产生的 Windows 工作线程。有一个名为 WrapperThreadProc 的特定线程,我不确定它在做什么,但它在可能不再存在的 COM 对象上调用 CoUninitialize,这可能导致 ole32.dll 上的异常(不确定这是否正在发生)。

这是异常发生时调用堆栈的图片

这是在navigate() 之后发生死锁时调用堆栈的图片

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

谢谢

【问题讨论】:

  • 截图不可读,无用。始终将调用堆栈作为文本发布,并提供minimal reproducible example。根据您提供的信息,我们只能建议您修复错误。
  • 感谢 cmets。下次我提出问题时,我会记住所有建议。话虽如此,我已经找到了解决问题的方法。事实证明,networkitemfactory.dll 中发生了争用情况,Microsoft 为其发布了修补程序。这是support.microsoft.com/en-us/kb/2494427的文章。

标签: c++ mfc ole freeze iwebbrowser2


【解决方案1】:

我已经找到了问题的解决方案。事实证明,networkitemfactory.dll 中发生了争用情况,这会导致 ole32.dll 崩溃和卸载。如果在“iwebbrowser2::navigate”之类的异常之后进行任何 COM 调用,则应用程序将陷入死锁。微软为它发布了一个修补程序。这是文章 support.microsoft.com/en-us/kb/2494427

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2012-10-20
    相关资源
    最近更新 更多