delphi - 如何在 Delphi 中正确释放/完成 ActiveX DLL?

delphi - 如何在 Delphi 中正确释放/完成 ActiveX DLL?

我们在这里使用了一个名为 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);

那么,有人知道我必须改变什么来摆脱内存泄漏吗?顺便说一句,我也尝试使用 FastMMRegisterExpectedMemoryLeaks来注册并忽略泄漏,但这似乎不起作用。此外,即使这只是一种解决方法,我想知道正确的方法来做到这一点。

相关推荐