Конференция "Corba" » Как освободить объект, создаваемый OleCreatePropertyFrame? [Delphi, Windows]
 
  • Adx_f (09.09.09 21:54) [0]
    Каждый раз при вызове OleCreatePropertyFrame система автоматически создает объект TActiveXPropertyPage, соответственно у ComServ увеличивается счетчик ObjectCount. Необходимо как-то сделать, чтобы после закрытия странички свойств этот объект корректно разрушался и счетчик ObjectCount уменьшался.

    Подскажите пожалуйста, как это можно сделать или как-то обойти эту проблему?

    код вызова странички свойств примерно такой:


    procedure TXXX.ShowPropertyPage;

     procedure CoFreeMem(P: Pointer);
     begin
       if P <> nil then CoTaskMemFree(P);
     end;

    var
     Unknown: IUnknown;
     Pages: TCAGUID;
    begin
     OleCheck(GetPages(Pages));
     try
       if Pages.cElems > 0 then
       begin
         Unknown := Self;
         OleCheck(OleCreatePropertyFrame(GetActiveWindow, 16, 16,
           nil,
           1, @Unknown, Pages.cElems, Pages.pElems,
           GetSystemDefaultLCID, 0, nil));
       end;
     finally
       CoFreeMem(pages.pElems);
     end;
    end;

  • clickmaker © (10.09.09 12:01) [1]
    Unknown.Release?
  • Adx_f (10.09.09 17:12) [2]
    Это не тот объект. С проблемой удалось разобраться. Как выяснилось, проблема в VCL

    destructor TActiveXPropertyPage.Destroy;
    begin
     FPropertyPageImpl.FPropertyPage.Free;
     FPropertyPageImpl.Free;
    end;
    Не вызывается inherited destroy

 
Конференция "Corba" » Как освободить объект, создаваемый OleCreatePropertyFrame? [Delphi, Windows]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]