首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TWebBrowser内存泄漏和访问冲突

TWebBrowser内存泄漏和访问冲突
EN

Stack Overflow用户
提问于 2014-07-24 13:21:56
回答 1查看 367关注 0票数 0

我的C++Builder应用程序(RAD XE4)正在泄漏内存。在进行一些调试时,我在创建和销毁的表单上查找了导致TWebBrowser组件的原因;显然,TWebBrowser或它创建的一个对象正在泄漏内存。

我还发现了一些奇怪的访问冲突:如果创建了这个带有TWebBrowser的表单,如果当前打开了一个模态对话框,那么组策略刷新(无论是从Windows的定期后台更新还是从调用gpupdate)都会导致访问冲突。据推测,不完全删除的TWebBrowser试图重新应用某些Internet设置,并追逐指向已删除对象的指针。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 13:21:56

这是C++Builder及其处理DelphiInterface属性中的一个错误。我在XE4和XE6中观察到了这一点;其他版本还没有经过测试。

显然,这与QC#106829描述的问题相同;德尔福处理IDispatch属性时调用AddRef,而不正确调用Release

解决办法是避免使用IDispatch Document属性,而是使用受保护的getter获取文档:

代码语言:javascript
复制
_di_IDispatch GetDocument(TWebBrowser *browser)
{
  // Hack to change access modifiers on TWebBrowser.  Since accessing the public
  // property doesn't work, we'll access the protected getter.
  class TWebBrowserHack : public TWebBrowser
  {
  public:
    _di_IDispatch GetDocument() { return Get_Document(); }
  };

  return static_cast<TWebBrowserHack*>(browser)->GetDocument();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24934939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档