Конференция "Corba" » TInterfacedObject - сколько живет объект после взятия интерфейса? [Delphi, Windows]
 
  • Cobalt © (16.09.13 16:22) [0]
    Правильно ли я понимаю, что иметь на руках одновременно объект и взятый у него интерфейс не принято?

    Поскольку после создания объекта RefCount = 0, после взятия интерфейса RefCount = 1, а после освобождения интерфейса RefCount = 0 и вызывается деструктор,
    После чего объект разрушается.

    Это так и задумано в VCL?
  • jack128_ (16.09.13 18:22) [1]

    > Это так и задумано в VCL?

    Да, так и задумано.

    > Правильно ли я понимаю, что иметь на руках одновременно
    > объект и взятый у него интерфейс не принято?

    ну как сказать. Например я такой подход иногда юзаю:

    function GetSomeInterface: IMyInterface;
    var
     Obj: TMyINtrefaceImpl;
    begin
     Obj := TMyIntrefaceImpl.Create;
     Result := Obj;
     Obj.Prop1 := ... ;
     Obj.Prop2 := ... ;
     Obj.Prop3 := ... ; // всех этих свойств в интерфейсе нету. Это я типа инициализирую..
     
    end;

  • Cobalt © (16.09.13 23:39) [2]
    Не-не, я имею в виду именно что:
    - в датамодуле хранишь объект,
    - а по запросу отдаю на регулярную обработку интерфейс от объекта
  • Cobalt © (17.09.13 11:49) [3]
    Получается, что хранить объект можно только если вместе с ним хранить еще и какой-либо из его интерфейсов (чтобы счетчик ссылок не обнулился раньше чем мне будет нужно)
  • Необычный Порошок (21.09.13 01:06) [4]
    есть костыль для интерфейса

    _addref()

    после чего автоматический подсчет ссылок уже никогда не вернет 0
  • bems © (11.10.13 01:58) [5]

    > Получается, что хранить объект можно только если вместе
    > с ним хранить еще и какой-либо из его интерфейсов (чтобы
    > счетчик ссылок не обнулился раньше чем мне будет нужно)

    я предпочитаю хранить интерфейсную ссылку и у себя, не только отдавать наружу
  • Юрий Зотов © (12.10.13 18:15) [6]

    > Cobalt ©   (16.09.13 16:22)
    >
    > Правильно ли я понимаю, что иметь на руках одновременно
    > объект и взятый у него интерфейс не принято?
    >

    Лучше всего - не смешивать в одной программе объектную модель с интерфейсной, а использовать либо одну, либо другую.
  • Cobalt © (16.10.13 09:58) [7]
    Увы, иногда приходится передавать IDispatch в сторонние бибилотеки, и объект должен жить постоянно.
    А все поля и методы отдавать в интерфейс не хочется.
 
Конференция "Corba" » TInterfacedObject - сколько живет объект после взятия интерфейса? [Delphi, Windows]
Есть новые Нет новых   [103795   +3][b:0.001][p:0.002]