【问题标题】:Access violation on shutdown from hidden TWebBrowser从隐藏的 TWebBrowser 关闭时访问冲突
【发布时间】:2015-08-20 11:11:31
【问题描述】:

场景:

  • 带有两个 TTabSheets 的 TPageControl
  • 不可见标签页上的 TWebBrowser
  • WebBrowser->在表单创建期间调用导航

如果用户只是运行表单并退出,那么在应用程序关闭期间,会产生访问冲突:

507C1413 美元的第一次机会例外。异常类 $C0000005 带有消息“在 0x507c1413 处的访问冲突:读取地址 0x00000010”。处理 Project1.exe (3464)

调试器中的调用堆栈仅包含一个条目,这表明调用堆栈已损坏:

:507c1413 ; C:\Program Files (x86)\Embarcadero\Studio\16.0\bin\vcl220.bpl

(另一个应用程序将调用堆栈显示为具有 IsFormSizeStored 的单个条目。)

在代码或 UI 中切换到浏览器的标签页可以避免该问题。不调用 Navigate 可以避免这个问题。

在 XE4 和 XE8 中观察到。

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 无法在导航到 google.com 的 Delphi XE3 中重现。
  • @TLama - 它在 XE4 中似乎是新的。我不再安装 XE3,但我只是尝试了 XE2,但我无法在那里重现它。
  • 您是否尝试将调用 WebBrowser->Navigate 移动到其他位置(例如 AfterConstruction)以允许首先完全创建表单?
  • @KenWhite - 迁移到 FormShow 没有帮助。
  • 您是否尝试过在关机时进行清理? (例如导航到 about:blank)

标签: delphi c++builder access-violation twebbrowser


【解决方案1】:

按照@TOndrej 的建议,我添加了一个 FormClose 事件处理程序,以在应用程序关闭之前删除 TWebBrowser 控件。

此问题已记录在RAD Studio Quality Portal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多