我有一個自動化對象,具有泄漏內存的事件支持。生成的源自帶的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