TStream
У них есть cв-во write, то он требует указатель типа const void * пытаюся преобразовать, говорил что нельзя, причем на этапе разработки и компиляции все хорошо, а при работе все плохо...
В чем проблема???
Буду рад любой реализации......
Потом набор строк TStrings выведи в поток с помощью SaveToStream.
Потом прочитай из потока с помощью LoadFromStream.
Сначала преобразуй свою структур в набор строк TStrings (путём вывода каждого члена в текстовую строку и добавляя каждую строку в набор).
Потом набор строк TStrings выведи в поток с помощью SaveToStream.
Потом прочитай из потока с помощью LoadFromStream.
бр.. не есть хорошо а если в мне в пльзовательской структуре захосится картинку приклеить... тогда что?
бр.. не есть хорошо а если в мне в пльзовательской структуре захосится картинку приклеить... тогда что?
Тогда приведи свой код, который компилится, но не работает. А так, на пальцах, я тебе всё что угодно насоветовать могу :D , хоть с использованием RPC :D
А если ты собираешься TPicture в поток выводить, так пользуй свойство Graphic типа TGraphic, и его методы для работы с потоком.
Что вообще ты пытаешься соорудить?
Тогда приведи свой код, который компилится, но не работает. А так, на пальцах, я тебе всё что угодно насоветовать могу :D , хоть с использованием RPC :D
А если ты собираешься TPicture в поток выводить, так пользуй свойство Graphic типа TGraphic, и его методы для работы с потоком.
Что вообще ты пытаешься соорудить?
минуту сейчас одну вещь проверю .....
минуту сейчас одну вещь проверю .....
Не пойму в чем косяк:
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);
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;
Структура, записываемая в поток может содержать ТОЛЬКО простые типы данных
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;
Спасибо!
Не пойму в чем косяк:
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 советует, или как я советовал ранее. В любом нетривиальном случае тебе фактически придётся разработать свой собственный формат файла. И неважно, будут у тебя данные писаться в дисковый файл или в поток, но формат тебе необходим.
В любом нетривиальном случае тебе фактически придётся разработать свой собственный формат файла. И неважно, будут у тебя данные писаться в дисковый файл или в поток, но формат тебе необходим.
Кстати, завести собственный формат часто бывает намного проще и эффективнее с точки зрения скорости, чем гонять данные в текст и обратно, как советовали до этого.
Кстати, завести собственный формат часто бывает намного проще и эффективнее с точки зрения скорости, чем гонять данные в текст и обратно, как советовали до этого.
да придется руками писать запись и чтения в поток..... P(