Форум: "KOL";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
ВнизВопрос по PStrListEx Найти похожие ветки
← →
BMouradov (2009-02-20 13:00) [0]Помогите, пожалуйста с PStrListEx. Пытаюсь добавить в него объекты, унаследованные от TObject, и ничего не получается. Вот максимально упрощённый код:
program A;
uses KOL;
type
PMyItem = ^TMyItem;
TMyItem = class
public
sField: string;
end;
var List: PStrListEx;
procedure NewItem;
var Item: TMyItem;
begin
Item := TMyItem.Create;
Item.sField := "123";
List.AddObject("345", Cardinal(@Item));
end; // NewItem
begin
List := NewStrListEx;
NewItem;
ShowMessage(PMyItem(List.Objects[0]).sField);
end.
На последней строке возникает ошибка. Пробовал и PMyItem^, и Cardinal(Item), и всё равно не получается. Эксперимент показал, что, видимо, дело в том, что Item - локальная переменная, и после выхода из процедуры она освобождается. Но как правильно переписать приведенный фрагмент, так и не смог понять.
(Желательно обойтись без замены TObject на PObj). Помогите, пожалуйста.
← →
Дмитрий К © (2009-02-20 13:16) [1]
procedure NewItem;
var Item: PMyItem;
begin
New(Item);
Item^ := TMyItem.Create;
Item.sField := "123";
List.AddObject("345", Cardinal(Item));
end; // NewItem
← →
BMouradov (2009-02-20 13:29) [2]Спасибо, сработало!
Если я правильно понял Ваш код, надо в деструкторе дописать:
for i := 0 to List.Count - 1 do begin
PMyItem(List.Objects[i]).Free;
Dispose(PMyItem(List.Objects[i]));
end;
← →
Дмитрий К © (2009-02-20 13:50) [3]Насколько я сам понимаю, да.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.002 c