Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TStream

272
16 ноября 2004 года
vladsoft
512 / / 20.08.2000
Как можно запихать пользовательскую структуру в поток типа TFileStream или TMemoryStream...
У них есть cв-во write, то он требует указатель типа const void * пытаюся преобразовать, говорил что нельзя, причем на этапе разработки и компиляции все хорошо, а при работе все плохо...
В чем проблема???
Буду рад любой реализации......
310
16 ноября 2004 года
fellow
853 / / 17.03.2003
Сначала преобразуй свою структур в набор строк TStrings (путём вывода каждого члена в текстовую строку и добавляя каждую строку в набор).
Потом набор строк TStrings выведи в поток с помощью SaveToStream.
Потом прочитай из потока с помощью LoadFromStream.
272
16 ноября 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by fellow
Сначала преобразуй свою структур в набор строк TStrings (путём вывода каждого члена в текстовую строку и добавляя каждую строку в набор).
Потом набор строк TStrings выведи в поток с помощью SaveToStream.
Потом прочитай из потока с помощью LoadFromStream.


бр.. не есть хорошо а если в мне в пльзовательской структуре захосится картинку приклеить... тогда что?

310
16 ноября 2004 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by vladsoft

бр.. не есть хорошо а если в мне в пльзовательской структуре захосится картинку приклеить... тогда что?


Тогда приведи свой код, который компилится, но не работает. А так, на пальцах, я тебе всё что угодно насоветовать могу :D , хоть с использованием RPC :D

А если ты собираешься TPicture в поток выводить, так пользуй свойство Graphic типа TGraphic, и его методы для работы с потоком.

Что вообще ты пытаешься соорудить?

272
16 ноября 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by fellow

Тогда приведи свой код, который компилится, но не работает. А так, на пальцах, я тебе всё что угодно насоветовать могу :D , хоть с использованием RPC :D

А если ты собираешься TPicture в поток выводить, так пользуй свойство Graphic типа TGraphic, и его методы для работы с потоком.

Что вообще ты пытаешься соорудить?

минуту сейчас одну вещь проверю .....

272
16 ноября 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by vladsoft
минуту сейчас одну вещь проверю .....


Не пойму в чем косяк:

Код:
TMemoryStream *str=new TMemoryStream;
int size;
TStrings *ptr=new TStringList;
ptr->Add("????");
ptr->Add("????");
Data *tmp=new Data;
tmp->name="tmp";
tmp->data=ptr;
str->Write(tmp,sizeof(tmp));
size=sizeof(tmp);
Data *pmt=new Data;
str->Read(pmt,size);
pmt->name;
this->ListBox1->Items->AddStrings(pmt->data);
2.3K
16 ноября 2004 года
ART-CODE
134 / / 15.11.2004
Структура, записываемая в поток может содержать ТОЛЬКО простые типы данных
CHAR/INT/BOOL/FLOAT

Никаких String,динамических массивов или указателей!!!!!
Для записи этих сложных вещей либо исп. методы класса или пиши свои полностью с нуля.

Например запись строки String
ЗАПИСЬ
1 - размер INT
2 - текст - несколько CHAR
ЧТЕНИЕ
сначала читаешь размер INT
Затем запускаешь цикл чтения CHAR (типа while read CHAR count<размер текст INT)

Или выделяешь буфер нужного размера и сразу в него читаешь все CHAR-намного быстрее, чем по-символам...(char *buff=new char[размер текст INT])

TStringList можно записать как одну большую строку
TStringList *list=new TStringList;
list->Text;
272
16 ноября 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by ART-CODE
Структура, записываемая в поток может содержать ТОЛЬКО простые типы данных
CHAR/INT/BOOL/FLOAT

Никаких String,динамических массивов или указателей!!!!!
Для записи этих сложных вещей либо исп. методы класса или пиши свои полностью с нуля.

Например запись строки String
ЗАПИСЬ
1 - размер INT
2 - текст - несколько CHAR
ЧТЕНИЕ
сначала читаешь размер INT
Затем запускаешь цикл чтения CHAR (типа while read CHAR count<размер текст INT)

Или выделяешь буфер нужного размера и сразу в него читаешь все CHAR-намного быстрее, чем по-символам...(char *buff=new char[размер текст INT])

TStringList можно записать как одну большую строку
TStringList *list=new TStringList;
list->Text;


Спасибо!

310
16 ноября 2004 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by vladsoft

Не пойму в чем косяк:
Код:
TMemoryStream *str=new TMemoryStream;
int size;
TStrings *ptr=new TStringList;
ptr->Add("????");
ptr->Add("????");
Data *tmp=new Data;
tmp->name="tmp";
tmp->data=ptr;
str->Write(tmp,sizeof(tmp));
size=sizeof(tmp);
Data *pmt=new Data;
str->Read(pmt,size);
pmt->name;
this->ListBox1->Items->AddStrings(pmt->data);



Размер tmp чему равен? Правильно, размеру указателя. А значение tmp чему равно? Правильно, адресу некоторого объекта типа Data. Так что компилятор абсолютно прав, когда, не найдя библиотеку telepat.dll, компилит вовсе не то, что ты от него ожидаешь :D

Ты то хотел, небось, скинуть в поток содержимое объекта типа Data, а скинул всего лишь значение указателя на него.

Посему, делай или как ART-CODE советует, или как я советовал ранее. В любом нетривиальном случае тебе фактически придётся разработать свой собственный формат файла. И неважно, будут у тебя данные писаться в дисковый файл или в поток, но формат тебе необходим.

10
16 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by fellow
В любом нетривиальном случае тебе фактически придётся разработать свой собственный формат файла. И неважно, будут у тебя данные писаться в дисковый файл или в поток, но формат тебе необходим.


Кстати, завести собственный формат часто бывает намного проще и эффективнее с точки зрения скорости, чем гонять данные в текст и обратно, как советовали до этого.

272
17 ноября 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by smartsoft

Кстати, завести собственный формат часто бывает намного проще и эффективнее с точки зрения скорости, чем гонять данные в текст и обратно, как советовали до этого.


да придется руками писать запись и чтения в поток..... P(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог