Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поинтер на интерфейс [D6, D7, Win2k]


elserpiente ©   (2007-06-13 15:10:00) 

Можно ли переменной-указатель (Pointer) указать поинтер интерфейса? и как с такой переменной можно потом прочитать интерфейс


Romkin   (2007-06-13 16:25:00) [1]

И есть возможность написать свой потомок TTreeNode :)
В D6 и выше - OnCreateNodeClass есть.


jack128   (2007-06-13 16:15:00) [2]

elserpiente   (13.06.07 15:57) [8]
а вообще може кто то сталкивался с проблемой удаления из TTreeNode данных по ссылке data? можно как-нибудь автоматизироваться этот процес?чтоб при удалении TreeNode данные тоже убивались


есть событие соответствующее. OnDeleting чтоли.. В нем и освобждай свои данные...


Сергей М.   (2007-06-13 16:00:00) [3]

А в чем проблема ?


elserpiente   (2007-06-13 15:57:00) [4]

а вообще може кто то сталкивался с проблемой удаления из TTreeNode данных по ссылке data? можно как-нибудь автоматизироваться этот процес?чтоб при удалении TreeNode данные тоже убивались


elserpiente   (2007-06-13 15:50:00) [5]

угу, пасибо, разобрались ;)


jack128   (2007-06-13 15:34:00) [6]

jack128 ©   (13.06.07 15:33) [5]
begin
...
IUnknown(TreeView1.Items[0].Data)._Release;
TreeView1.Items[0].Data := nil;
end;


точнее
if TreeView1.Items[0].Data <> nil then
begin
IUnknown(TreeView1.Items[0].Data)._Release;
TreeView1.Items[0].Data := nil;
end;


jack128   (2007-06-13 15:33:00) [7]

elserpiente   (13.06.07 15:28) [4]
это нужно для хранении данных в TTreeView, а именно в TTreeNode.Data


Ну тогда лудше так:

var
 Intf: IUnknown;
begin
...
 TreeView1.Items[0].Data := Pointer(Intf);
 Intf._AddRef;
end;

begin
 ...
 IUnknown(TreeView1.Items[0].Data)._Release;
 TreeView1.Items[0].Data := nil;
end;


elserpiente   (2007-06-13 15:28:00) [8]

это нужно для хранении данных в TTreeView, а именно в TTreeNode.data


Сергей М.   (2007-06-13 15:23:00) [9]

А за каким лешим нужны эти хитромудрые преобразования ?

Почему переменную p не сделать типа IInterface ?


elserpiente   (2007-06-13 15:20:00) [10]

ну что типа этого

var
 p: pointer;
 i: IMyInt;
...
i := TMyInt.Create;
p:= @i;

IMyInt(p).MyField := 0;


Сергей М.   (2007-06-13 15:15:00) [11]


> Можно ли переменной-указатель (Pointer) указать поинтер
> интерфейса?


Можно.

MyPointerVariable := MyInterface;

Но не нужно.


> как с такой переменной можно потом прочитать интерфейс
>


Что значит "прочитать интерфейс" ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо