如何为Interface对象注册预期的内存泄漏

Jas*_*son 3 delphi memory-leaks delphi-xe2

是否可以使用该RegisterExpectedMemoryLeak过程注册接口?

我有一个私有字段声明为:

FDragDropTarget: IDropTarget;
Run Code Online (Sandbox Code Playgroud)

然后我创建一个这样的实例并尝试为此对象注册已知的内存泄漏:

  FDragDropTarget := TDropTarget.Create(lcMain.Handle, FDragDrop);
  RegisterExpectedMemoryLeak(FDragDropTarget);
Run Code Online (Sandbox Code Playgroud)

但是我得到一个编译错误,指出存在不兼容的类型:'Pointer'和'IDropTarget'.对我来说,我的界面实例无论如何都是一个指针?

我可以这样做吗?它是通过我的.dpr文件中的ReportMemoryLeaksOnShutdown:= True语句报告的.

begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)

TDropTarget是我对IDropTarget接口的实现:

  TDropTarget = class(TInterfacedObject, IDropTarget)
  ...
  end;
Run Code Online (Sandbox Code Playgroud)

谢谢

Gol*_*rol 5

它不是泄漏的接口,而是实现它的对象.所以我认为那是需要注册的:

FDragDropTargetObj: TDropTarget;
FDragDropTarget: DropTarget;


FDragDropTargetObj := TDropTarget.Create(lcMain.Handle, FDragDrop); 
FDragDropTarget := FDragDropTargetObj;
RegisterExpectedMemoryLeak(FDragDropTargetObj);
Run Code Online (Sandbox Code Playgroud)