-
Правильно ли я понимаю, что иметь на руках одновременно объект и взятый у него интерфейс не принято?
Поскольку после создания объекта RefCount = 0, после взятия интерфейса RefCount = 1, а после освобождения интерфейса RefCount = 0 и вызывается деструктор, После чего объект разрушается.
Это так и задумано в VCL?
-
> Это так и задумано в VCL?
Да, так и задумано. > Правильно ли я понимаю, что иметь на руках одновременно > объект и взятый у него интерфейс не принято?
ну как сказать. Например я такой подход иногда юзаю: function GetSomeInterface: IMyInterface;
var
Obj: TMyINtrefaceImpl;
begin
Obj := TMyIntrefaceImpl.Create;
Result := Obj;
Obj.Prop1 := ... ;
Obj.Prop2 := ... ;
Obj.Prop3 := ... ;
end;
-
Не-не, я имею в виду именно что: - в датамодуле хранишь объект, - а по запросу отдаю на регулярную обработку интерфейс от объекта
-
Получается, что хранить объект можно только если вместе с ним хранить еще и какой-либо из его интерфейсов (чтобы счетчик ссылок не обнулился раньше чем мне будет нужно)
-
есть костыль для интерфейса
_addref()
после чего автоматический подсчет ссылок уже никогда не вернет 0
-
> Получается, что хранить объект можно только если вместе > с ним хранить еще и какой-либо из его интерфейсов (чтобы > счетчик ссылок не обнулился раньше чем мне будет нужно)
я предпочитаю хранить интерфейсную ссылку и у себя, не только отдавать наружу
-
> Cobalt © (16.09.13 16:22) > > Правильно ли я понимаю, что иметь на руках одновременно > объект и взятый у него интерфейс не принято? >
Лучше всего - не смешивать в одной программе объектную модель с интерфейсной, а использовать либо одну, либо другую.
-
Увы, иногда приходится передавать IDispatch в сторонние бибилотеки, и объект должен жить постоянно. А все поля и методы отдавать в интерфейс не хочется.
|