Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
#1: 2006-11-29 14:22:36 ЛС | профиль | цитата
Я обнаружил отсутствие одной важной строки в компоненте MemoryStream, без которой не копируются данные из потока по doCopy.
procedure THIMemoryStream._work_doCopy;
var St:PStream;
begin
_prop_Stream.Size := 0;
St := ReadStream(_data,_data_SrcStream,nil);
St.Position:= 0; // вот эта строка обязательна, ее не было
if St <> nil then
Stream2Stream(_prop_Stream,St,St.Size);
end;
карма: 22

0
Ответов: 9906
Рейтинг: 351
#2: 2006-11-29 15:03:36 ЛС | профиль | цитата
Про обязательность - не факт
А логика, конечно, есть: если уж обязательно до конца, то почему не обязательно с начала ???
А не обязательно до конца (хотя и возможно), и не обязательно с начала, то есть вроде бы StreamCopy
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#3: 2006-11-29 15:46:45 ЛС | профиль | цитата
Galkov, я имел ввиду именно штатную, на данный момент, среду. Ну не делает метод ReadStream при чтении потока возврат в начало, и нет возможности сбросить позицию извне, черт его знает почему, я не полез шурудить выше? А метод Stream2Stream копирует именно с места Stream.Position.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#4: 2006-11-29 16:48:21 ЛС | профиль | цитата
nesco писал(а):
и нет возможности сбросить позицию извне

Чего
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#5: 2006-11-29 17:27:12 ЛС | профиль | цитата
Galkov, вот это я оплошался. Да, точка doPosition скрыта. Извини за невнимательность. А тогда эта тема не нужна. Можешь спокойно удалить.

[size=-2]------ Добавлено в 17:27
Нет погоди удалять. doPosition устанавливает позицию приемника, а кто тогда устанавливает позицию источника -- этого метода-то нет?
карма: 22

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#6: 2006-11-29 23:03:04 ЛС | профиль | цитата
Без этого исправления ни один упаковщик нормально не работает -- у них, у всех, стрим в потоке, а нижней точки -- нет.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#7: 2006-11-29 23:38:32 ЛС | профиль | цитата
Схемку давай
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#8: 2006-11-30 01:37:49 ЛС | профиль | цитата
Galkov, вот схемка, но тут прикол еще интереснее. Тут MemoryStream работает, но не работает BitmapStream. code_661
Странно все это. Я просто не могу сейчас представить всю схему, где не работает именно MemoryStream.

[size=-2]------ Добавлено в 01:37
Я кажется разобрался. Тут происходит интересная вещь. Если компонент передает MemoryStream'y стрим с конечой позиции (до установки любой позиции я не дошел), то ничего не читается, тк в MemoryStream'е позиция не обнуляется. Но этого не происходит, если при передаче обнулить позицию передаваемого стрима.
карма: 22

0
файлы: 1code_661.txt [1.9KB] [456]
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)