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

你可能感兴趣的:(Delphi中使用TWebBrowser时存在内存泄漏问题)