Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.10;
Скачать: CL | DM;

Вниз

Вопрос по 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 вся ветка

Текущий архив: 2011.07.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
1-1259091900
Misterix
2009-11-24 22:45
2011.07.10
Перетащить картинку с рабочего стола на TImage


15-1300896940
Palladin
2011-03-23 19:15
2011.07.10
Делегаты, анонимные методы, C#


15-1300860825
И. Павел
2011-03-23 09:13
2011.07.10
что вернет вызов (new SimpleFormatDateTime).Formst("MMM") в Java?


15-1300719280
mahab-22
2011-03-21 17:54
2011.07.10
работа с dbexpress


2-1301573246
student1991
2011-03-31 16:07
2011.07.10
что не так с кодом