Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как мне перевести свой тип в поток? [D7, WinXP]


Страницы:   1 2 3

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. Прочитать с его помощью можно в любую переменную (этот параметр там нетипизированный). Главное - следить за размером.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо