чтение delphi из TMemorystream без изменения позиции - PullRequest
1 голос
/ 05 октября 2019

У меня есть поток TMemory, который заполняется из процесса, мне нужно прочитать другую его часть в режиме реального времени. Когда я использую этот код:

for i := 0 to j do
begin
    FOutputStream.position:=i * 194
    stream4.CopyFrom(FOutputStream,   194 );
end;

он возвращает неправильные данные, потому что процесс записиизменить позицию. поэтому я решил использовать свойство Memory

stream4.CopyFrom( PByte(FOutputStream.Memory)[ i * 194 ] , 194) );

, но получил эту ошибку

[DCC Error] Unit1.pas (640): E2010 Несовместимые типы: 'TStream' и 'Байт '

как я могу обработать эту ошибку?

1 Ответ

6 голосов
/ 05 октября 2019

Вы не можете использовать CopyFrom напрямую в этом случае, потому что для этого требуется поток, и у вас есть указатель.

Вы можете решить эту проблему, создав объект потока, который обернет память, принадлежащую другому потоку памяти. Однако это излишне сложно. Вам просто нужно позвонить WriteBuffer.

stream4.WriteBuffer(PByte(FOutputStream.Memory)[i * 194] , 194);

Я предполагаю, что вы это знаете, но, поскольку вы работаете из разных потоков при чтении и записи в поток памяти, вам необходимо убедиться, что этиДействия учитывают любые потенциальные проблемы безопасности потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...