![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работать с интерфейсами? [D7]
GrayFace © (2004-06-21 11:10:00)Сделал свой интерфейс. Сгенерил ['16-байтовый-ключ'], пишу
Sender:TObject
(Sender as IMyInterface).
Ругается: Invalid Typecast.
clickmaker (2004-06-21 11:35:00) [1]
> Наверное есть еще - сейчас не соображу...
Например
Sender.ComObject.QueryInterface(IID_IMyInterface, Intf)
Тимохов (2004-06-21 11:28:00) [2]во случае применения ответа [1] и НЕ применения специальных мер рискуете остаться без объекта sender. Дело в том, что после отработки as делается _addRef, а потом делается _release.
И если у вас sender это просто объект, имеющий на момент вызова as свойствао refcount равным 0, то после команды as объект у вас просто удалится (отработает деструктор). А далее - сами знаете, будут av.
Одно из решений - не мешать модель интрефейсов и модель объектов (как советует Эрик Хармон). Воторое решение - отказаться от подсчета ссылок сделав _addref и _release пусташками. Наверное есть еще - сейчас не соображу...
U (2004-06-21 11:22:00) [3]var intf: IMyInterface;
if Sender.GetInterface(IMyInterface, intf) then
begin
intf.DoSomethng;
end;
clickmaker (2004-06-21 11:13:00) [4]TInterfacedObject(Sender) as IMyInterface