我有一个带有事件支持的自动化对象,它泄漏内存。与生成的源一起提供的fcConnectionPoints永远不会释放。当我手动添加fconnectionpoints.free在析构函数中时,泄漏会消失。
我在Delphi7上,使用fastmmborlandm.dll和fastmm fulldebugmode.dll。
复制步骤:
-
启动新的ActiveX库项目
-
添加新的自动化对象:name=testobject;选中“生成事件支持代码”
-
打开类型库,向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代码模板中的一个bug,是我做错了什么,还是它打算释放fconnectionpoints(帮助没有提到它)?