![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как мне перевести свой тип в поток? [D7, WinXP]
Dmitry_04 © (2005-01-14 14:04:00)Как мне перевести свой тип в поток? Т.е. я создал свой тип:
type
...=record
...
end;
Как мне его перевести в TMemoryStream и обратно?
Dmitry_04 (2005-01-14 15:20:00) [21]да, но почему она не возникает при чтении? А когда программу закрываешь? Так все записывается и читается отлично...
Digitman (2005-01-14 15:16:00) [22]
> Dmitry_04 (14.01.05 15:09) [23]
> Что это такое вообще не понимаю...
когда не понимаешь, вариантов не так уж и много : либо спросить о значении непонятного здесь же, в форуме, либо почитать книжки на эту тему, либо переквалифицироваться в управдомы
если же сообщение переводить дословно, то оно звучит так :
Возникло исключение класса EAccessViolation в модуле таком-то при выполнении маш.инструкции, находящейся по адресу такому-то.
Исключение возникло из-за нарушения прав доступа к данным по адресу такому-то в модуле таком-то.
Нарушение прав произошло при попытке чтения данных по такому-то адресу.
Dmitry_04 (2005-01-14 15:14:00) [23]DigitmanТочно! Тему говоришь! :)
Digitman (2005-01-14 15:09:00) [24]
> Как мне перевести
слово "перевести", миль пардон, ассоциируется с "бабушку через дорогу"...
а для потока (Делфи-объекта, наследника TStream) существуют термины "записать в поток", "прочитать из потока"
Dmitry_04 (2005-01-14 15:09:00) [25]выскакивает окно ошибки:
"Exception EAccessViolation in module Project1.exe at 00003E1C. Access violation at address 00403E1C in module Project1.exe. Read of address 00956394."
Что это такое вообще не понимаю...
Семен Сорокин (2005-01-14 15:08:00) [26]
> Dmitry_04 (14.01.05 15:03) [19]
> и почему она выскакивает не понимаю...
[6] & [16]
PS. Прям как предвидел продолжение :)
Kerk (2005-01-14 15:07:00) [27]Dmitry_04 (14.01.05 15:03) [19]
см [16]
Digitman (2005-01-14 15:06:00) [28]
> begin...end © (14.01.05 14:58) [18]
> О-о-о... Ещё и это...
ладно бы только это ..
> Dmitry_04 (14.01.05 14:57) [17]
> при закрытии программы ошибка какая-то выпадает
и буквы в сообщении об ошибке, конечно же, не знакомые ?
> почему она выскакивает не понимаю
потому что ошибка)
Dmitry_04 (2005-01-14 15:03:00) [29]и почему она выскакивает не понимаю...
mstrm.Free; написал...
begin...end (2005-01-14 14:58:00) [30]> [16] Digitman © (14.01.05 14:56)
О-о-о... Ещё и это...
Dmitry_04 (2005-01-14 14:57:00) [31]я думал надо так... потому что переменная fmv пустая, в ней ничего нет... вот меня и смутил ее размер...
Но теперь все работает... только почему-то при закрытии программы ошибка какая-то выпадает...:(
Digitman (2005-01-14 14:56:00) [32]
> Dmitry_04 (14.01.05 14:51) [12]
> s: string; !!!!!!!!!
> что-то у меня не получается прочитать всю переменную из
> потока...:( Что делать?
читать в справке все про длинные строки до полного просветления
Александр Иванов (2005-01-14 14:54:00) [33]Нужен размер считываемого блока данных, а не указателя :).
Александр Иванов (2005-01-14 14:53:00) [34]>mstrm.Read(fmv, SizeOf(mstrm));
>mstrm.Read(fmv, SizeOf(fmv));
begin...end (2005-01-14 14:53:00) [35]> [12] Dmitry_04 (14.01.05 14:51)
> mstrm.Read(fmv, SizeOf(mstrm))
Вы читаете из потока переменную типа TMyVar. Вам надо указать, сколько байт нужно в эту переменную прочитать. Так почему же Вы указываете вторым параметром в Read размер переменной-потока, а не размер переменной fmv?
Dmitry_04 (2005-01-14 14:51:00) [36]что-то у меня не получается прочитать всю переменную из потока...:( Что делать?
type
TMyVar = record
i: integer;
s: string;
b: boolean;
end;
var
mstrm: TMemoryStream;
fmv: TMyVar;
...
mstrm.Read(fmv, SizeOf(mstrm));
begin...end (2005-01-14 14:18:00) [37]> [10] Dmitry_04 (14.01.05 14:17)
Чтобы при чтении заполнить ВСЮ переменную. Не больше, но и не меньше.
Dmitry_04 (2005-01-14 14:17:00) [38]begin...endизвени за глупый вопрос, но зачем следить за размером?
Dmitry_04 (2005-01-14 14:16:00) [39]Семен Сорокинхорошая идея... :) Попробую "read"
begin...end (2005-01-14 14:15:00) [40]> [5] Dmitry_04 (14.01.05 14:13)
У TStream и у его наследника TMemoryStream есть метод Read. Прочитать с его помощью можно в любую переменную (этот параметр там нетипизированный). Главное - следить за размером.