Помогите, пожалуйста. После подключения EventSink к COM объекту процесс, в котором выполняется COM объект, не выгружается из памяти.
procedure TChildEventsBaseSink.Connect (const ASource: IUnknown);
var
pcpc: IConnectionPointContainer;
begin
Assert (ASource <> nil);
Disconnect;
try
OleCheck (ASource.QueryInterface (IConnectionPointContainer, pcpc));
OleCheck (pcpc.FindConnectionPoint (FSinkIID, FCP));
OleCheck (FCP.Advise (Self, FCookie));
FSource := ASource;
except
raise Exception.Create (Format ('Unable to connect %s.'#13'%s',
[ClassName, Exception (ExceptObject).Message]
));
end;
end;
Если в следующем коде закоментировать CE.Connect(ChldObj), то процесс будет выгружен из памяти. Иначе останется висеть. Причем все секции финализации успешно проходятся.
ChldObj := CoChild.Create;
CE := TChildEvents.Create;
CE.Connect(ChldObj);
CE.Disconnect;
CE.Free;
PostThreadMessage(ii1, WM_QUIT, 0, 0);
COM сервер находится в DLL. Когда процесс остается в памяти DLL тоже блокируется.
Могу выложить весь код. Это тестовое приложение.