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

Вниз

Запись динамического массива в файл   Найти похожие ветки 

 
Злой!!!   (2002-08-30 12:15) [0]

Господа мастера! Подскажите как записать динамический массив объектов в файл, а то у меня вместо значений, в файл записываются указатели. Я объявляю:

smeta: array of TSmeta;
smFile: file of TSmeta;


TSmeta - это класс. При записи пишу:

for i:=0 to High(Smeta) do
begin
write(smFile,smeta[i]);
end;


Спасибо.


 
Smithson ©   (2002-08-30 12:25) [1]

Попробуй, когда открываешь файл - Reset(smFile, [b]1[/b]);


 
Виктор Щербаков ©   (2002-08-30 12:30) [2]

Smithson © (30.08.02 12:25)
Дело не в этом. array of TSmeta - это массив указателей на экземпляры класса TSmeta.


 
Skier ©   (2002-08-30 12:32) [3]

>Злой!!!
Я так понял что тебе нужно записать свойства
объектов в файл. Для этого ты сначала посмотри, как
в Delphi организованы классы TReader и TWriter - очень
поучительно, знаешь ли...


 
Opuhshii ©   (2002-08-30 12:46) [4]

мда,.. ну и что?,..

Pointer types—whether implicit or explicit—are not allowed, so a file cannot contain dynamic arrays, long strings, classes, objects, pointers, variants, other files, or structured types that contain any of these.

тут я вижу два варианта,. либо ваша TSmeta = class(TComponent)..,
там есть imho SaveToStream для published (D6 под рукой нет,.. но такое кажеться было,... !!! (не факт)),,.
либо... либо ручками,..



 
Iliaser   (2002-08-30 12:47) [5]


write(smFile,smeta[i]);


Записывает в файл кусок памяти расположенный по адресу
@smeta[i] размером в sizeof(TSmeta) байт. Следовательно
если в структуре у тебя есть поле указатель на что либо
то в файл будет записано значение этого указателя а не
данные на которые этот указатель указывает.


 
PVOzerski ©   (2002-08-30 13:57) [6]

либо переделать tSmeta из class в object, взять из OWL от BP tFileStream, подправить его для 32-разрядности (предупреждаю: работа огромная) и работать через него, либо писать тем или иным способом интересующие вас поля отдельно. Во 2-м случае могу порекомендовать собрать эти поля (для property это не подойдет) в одно поле-record. А еще в модуле Classes есть функции ReadComponentResFile и WriteComponentResFile для классов-наследников tComponent. Я их не пробовал, но предполагаю, что если tSmeta сделать компонентом, то они могут оказаться тем, что надо.


 
Skier ©   (2002-08-30 14:01) [7]

>PVOzerski

> что если tSmeta сделать компонентом

А это зачем ?


 
PVOzerski ©   (2002-08-30 15:33) [8]

>> что если tSmeta сделать компонентом
Да просто Help почитал, а там описалово на функции такое:
WriteComponentResFile procedure
Writes components and their properties to a file using a Windows resource file format.
procedure WriteComponentResFile(const FileName: string; Instance: TComponent);
ReadComponentResFile function
Reads components and their properties from a specified Windows resource file.
function ReadComponentResFile(const FileName: string; Instance: TComponent): TComponent;

Вроде бы то, что надо, но параметр Instance должен быть совместим с tComponent. Из чего совершенно не следует, что его надо инсталлировать, регистрировать и т.п.


 
Skier ©   (2002-08-30 15:40) [9]

>PVOzerski
Ага. Значит я тебя не понял я то думал что ты
под фразой "tSmeta сделать компонентом" имел ввиду как раз
инсталлирование, регистрирацию и т.п.

IMHO, автору вопроса нужно сделать свою tSmeta потомком tComponent и опубликовать необходимые свойства. И будет ему счастье :))



 
Злой!!!   (2002-08-30 16:20) [10]

Всем, спасибо, работает - по совету Opuhshii записываю свойства ручками... К сожалению остальные способы мне пока непонятны :(



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.017 c
3-35597
Jony
2002-08-22 10:33
2002.09.12
Создание полей в DataSet и связанных с ними элементов в RunTime


1-35815
Cr@sh
2002-09-01 12:39
2002.09.12
Освобождение памяти.


14-35878
Юрий Зотов
2002-08-18 15:43
2002.09.12
Информация - новый пример в кладовке.


1-35773
matvey
2002-08-30 17:46
2002.09.12
Закрытие всех приложений.


1-35689
Sergey-ZZZ
2002-08-30 12:12
2002.09.12
Компоненты