我正在使用一个
TMemoryStream
并且需要将它传递给一个需要TStream
类型变量的过程(来自外部库)。我只需要这样强制类型转换:TMemoryStream
转 TStream
:var
myStream: TMemoryStream;
begin
//...
ExternalProcedure(TStream(myStream)); //procedure ExternalProcedure(var AStream: TStream);
end;
这是需要避免的事情吗?它会占用大量额外的内存(相关流可能会有几 MB)吗?我的猜测是否定的,但在 Delphi 中不确信。
TStream
?由于TMemoryStream
是从TStream
派生的,因此您可以直接传递它。实际上,所有流变体都是从TStream
派生的原因是允许轻松统一地访问来自各种不同流类型的数据。 - SilverWariorvar
参数意味着被调用者可以更改引用。完全有可能库的作者不理解引用类型。这个库是什么? - David HeffernanExternalProcedure(AStream:TStream)
),唯一复制的是指向流对象的指针。因此,“外部过程”仍然能够修改流对象。它唯一不能再做的事情是更改传递给它的指针。因此,如果myStream
在调用之前指向$123456
处的流对象,则在调用之后它仍将指向$123456
。但是那里的对象可能已经发生了变化。 - Andreas Rejbrand