从隐藏的TWebBrowser关闭访问冲突

时间:2015-06-05 13:17:56

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

情景:

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

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

  

第一次机会异常在$ 507C1413。异常类$ C0000005,消息'访问冲突位于0x507c1413:读取地址0x00000010'。处理Project1.exe(3464)

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

  

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

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

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

在XE4和XE8中观察。

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

1 个答案:

答案 0 :(得分:1)

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

此问题已记录在JSFiddle here