从TMemorystream读取的delphi而不改变位置

pei*_* F. 1 delphi

我有一个从进程填充的TMemory流,我需要实时读取它的其他部分。当我使用此代码时:

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

它返回错误的数据,因为编写器进程更改了位置。所以我决定使用Memory属性

stream4.CopyFrom( PByte(FOutputStream.Memory)[ i * 194 ] , 194) );
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误

[DCC错误] Unit1.pas(640):E2010不兼容的类型:'TStream'和'Byte'

我该如何处理此错误?

Dav*_*nan 6

CopyFrom在这种情况下,您不能直接使用,因为这需要流,并且您有一个指针。

您可以通过创建一个包装另一个内存流拥有的内存的流对象来解决此问题。但是,这不必要地复杂。您只需要打电话WriteBuffer

stream4.WriteBuffer(PByte(FOutputStream.Memory)[i * 194] , 194);
Run Code Online (Sandbox Code Playgroud)

我想您知道这一点,但是由于在读取和写入内存流时您是通过不同的线程进行操作的,因此需要确保这些操作解决了任何潜在的线程安全问题。