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;
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Я обнаружил отсутствие одной важной строки в компоненте MemoryStream, без которой не копируются данные из потока по doCopy.
|
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Про обязательность - не факт
А логика, конечно, есть: если уж обязательно до конца, то почему не обязательно с начала ??? А не обязательно до конца (хотя и возможно), и не обязательно с начала, то есть вроде бы StreamCopy |
|||
карма: 9 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Galkov, я имел ввиду именно штатную, на данный момент, среду. Ну не делает метод ReadStream при чтении потока возврат в начало, и нет возможности сбросить позицию извне, черт его знает почему, я не полез шурудить выше? А метод Stream2Stream копирует именно с места Stream.Position.
|
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
nesco писал(а): и нет возможности сбросить позицию извнеЧего |
|||
карма: 9 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Galkov, вот это я оплошался. Да, точка doPosition скрыта. Извини за невнимательность. А тогда эта тема не нужна. Можешь спокойно удалить.
[size=-2]------ Добавлено в 17:27 Нет погоди удалять. doPosition устанавливает позицию приемника, а кто тогда устанавливает позицию источника -- этого метода-то нет? |
|||
карма: 22 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Без этого исправления ни один упаковщик нормально не работает -- у них, у всех, стрим в потоке, а нижней точки -- нет.
|
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Схемку давай
|
|||
карма: 9 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Galkov, вот схемка, но тут прикол еще интереснее. Тут MemoryStream работает, но не работает BitmapStream. code_661
Странно все это. Я просто не могу сейчас представить всю схему, где не работает именно MemoryStream. [size=-2]------ Добавлено в 01:37 Я кажется разобрался. Тут происходит интересная вещь. Если компонент передает MemoryStream'y стрим с конечой позиции (до установки любой позиции я не дошел), то ничего не читается, тк в MemoryStream'е позиция не обнуляется. Но этого не происходит, если при передаче обнулить позицию передаваемого стрима. |
|||
карма: 22 |
| ||
файлы: 1 | code_661.txt [1.9KB] [456] |
8