我有一个从进程填充的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错误] Unit1.pas(640):E2010不兼容的类型:'TStream'和
'字节'


我该如何处理此错误?

最佳答案

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

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

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


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

10-08 14:47