Конференция "Corba" » Процесс не выгружается из памяти
 
  • Unknown_user (28.08.10 23:59) [0]
    Помогите, пожалуйста. После подключения 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;  { finally }
    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 тоже блокируется.

    Могу выложить весь код. Это тестовое приложение.
  • Сергей М. © (29.08.10 20:49) [1]

    > все секции финализации успешно проходятся


    Что-то не вижу ни одной ..
  • Unknown_user (14.09.10 00:26) [2]
    Имелись ввиду функции финализации модулей проекта. проблема решилась ручным вызовом CoUninitialize. Спасибо.
 
Конференция "Corba" » Процесс не выгружается из памяти
Есть новые Нет новых   [134427   +34][b:0][p:0.002]