【发布时间】:2009-11-26 15:44:55
【问题描述】:
我们在这里使用了一个名为 ODNCServer 的类 - 在初始化时,会创建一个 TAutoObjectFactory 对象:
initialization
pAutoObjectFactory := TAutoObjectFactory.Create(ComServer, TODNCServer, Class_ODNCServer, ciSingleInstance, tmApartment);
现在FastMM 抱怨内存泄漏,因为该对象没有在任何地方释放。如果我添加这样的终结语句
finalization
if assigned(pAutoObjectFactory) then
TAutoObjectFactory(pAutoObjectFactory).Free;
然后对象被释放,但是之后弹出关于内存泄漏的FastMM对话框,所以实际上,操作系统似乎正在卸载DLL,而不是程序。 ODNCServer 的实例是这样创建的
fODNCServer := TODNCServer.Create(nil);
//register into ROT
OleCheck(
RegisterActiveObject(
fODNCServer.DefaultInterface, // instance
CLASS_ODNCServer, // class ID
ACTIVEOBJECT_STRONG, //strong registration flag
fODNCServerGlobalHandle //registration handle result
));
并像这样被释放:
if ((assigned(fODNCServer)) and (fODNCServerGlobalHandle <> -1)) then
begin
Reserved := nil;
OleCheck(RevokeActiveObject(fODNCServerGlobalHandle,Reserved));
fDTRODNCServerGlobalHandle := -1;
end;
FreeAndNil(fODNCServer);
那么,有谁知道我必须改变什么来摆脱那个内存泄漏?顺便说一句,我也尝试使用 FastMM 的RegisterExpectedMemoryLeaks 注册并忽略泄漏,但这似乎不起作用。此外,即使这只是一种解决方法,我想知道正确的方法。
【问题讨论】:
标签: delphi memory-leaks activex fastmm