Delphi中使用TWebBrowser时存在内存泄漏问题

也许是大家用得少, 在几年之间每当提起这个问题一直有人认为是程序的其它方面有缺陷, 就如同大富翁论坛上的这个帖子一样: http://www.delphibbs.com/delphibbs/dispq.asp?lid=347350

而且还有一个专家星人信誓旦旦地给出好几个所谓的解决办法和英文资料, 但是完全无用! 这个人是谁我就不说了.

但是事实证明并非如此, 而是VCL中对于TOleControl的实现有问题, 也就是说上面那个帖子中最后zhongs的解答才是正确的.

zhongs建议在TWebBrowser和TOleControl的继承关系中间加入一个修正此问题的中间类...

但是经我观察, 我认为TOleControl存在的缺陷会广泛波及其它既有的和将来可能有的自动化控件, 所以我的建议是对OleCtrls.pas进行如下修改:

function TOleControl.GetIDispatchProp(Index: Integer): IDispatch;
var
  Temp: TVarData;
begin
  GetProperty(Index, Temp);
  //Result := IDispatch(Temp.VDispatch);
  Pointer(Result) := Temp.VDispatch;
end;

function TOleControl.GetIUnknownProp(Index: Integer): IUnknown;
var
  Temp: TVarData;
begin
  GetProperty(Index, Temp);
  //Result := IUnknown(Temp.VUnknown);
  Pointer(Result) := Temp.VUnknown;
end;

并且要记住重新编译OleCtrls.pas

http://www.net885.com/html/article/201810/16/40.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值