我有一个自动化对象,具有泄漏内存的事件支持。生成的源自带的FConnectionPoints永远不会被释放。当我在析构函数中手动添加FConnectionPoints.Free时,泄漏消失。自动化对象泄漏内存(TConnectionPoints)
我在Delphi 7上,使用FastMM BorlandMM.dll和FastMM_Fulldebugmode.dll。
重现步骤:
- 启动一个新的ActiveX库项目
- 添加一个新的自动化对象:名称=的TestObject;检查“生成事件支持代码”
- 打开TypeLibrary,向ITestObject添加方法,向ITestObjectEvents添加事件
- 刷新,将生成代码。
- 添加ShareMem作为第一部在.dpr文件
- 保存,编译并注册该ActiveX服务器(运行菜单)
- 开始一个新的应用程序项目
- 将ShareMem作为第一部在.dpr文件
- 导入类型库单元:创建一个从你刚刚在步骤6,创建DLL单位,并勾选“生成部件的包装材料”
- 在你FORMCREATE添加以下代码:
代码:
var
lTest: TTestObject;
begin
lTest := TTestObject.Create(nil);
try
lTest.ConnectKind := ckNewInstance;
lTest.Connect;
lTest.Disconnect;
finally
lTest.Free;
end;
end;
现在编译,运行并关闭此应用程序。内存泄漏将被报告。
问:
这是在Delphi的代码模板中的错误,我在做成才错了,或者是旨在免费FConnectionPoints自己(的帮助并没有提到它)?
TConnectionPoints不是一个接口对象,它只是一个继承TObject的对象。 FConnectionPoints作为实现IConnectionPointContainer的属性返回。 – 2010-01-08 15:27:43