Rod*_*ddy 4 delphi tstream delphi-xe3
我为旧版RADStudio提供了一些派生类,只需重新实现Read,Write,Seek方法以及Size和Position属性.
我希望将这些移植到XE3,但我看到现在(例如)有三个重载Read- 原始的一个,加上两个以TBytes作为参数.
德尔福
function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Read(Buffer: TBytes; Offset, Count: Longint): Longint; overload; virtual;
function Read(var Buffer: TBytes; Count: Longint): Longint; overload;
Run Code Online (Sandbox Code Playgroud)
C++
virtual int __fastcall Read(void *Buffer, int Count)/* overload */;
virtual int __fastcall Read(System::DynamicArray<System::Byte> Buffer, int Offset, int Count)/* overload */;
int __fastcall Read(System::DynamicArray<System::Byte> &Buffer, int Count)/* overload */;
Run Code Online (Sandbox Code Playgroud)
我需要实现这三个,还是只需一个?如果只有一个,哪一个......?
通常情况下,我可以从VCL源代码中找到它,但我目前只有试用版(无源代码).
您只需要使用这些签名实现读写方法
function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Write(const Buffer; Count: Longint): Longint
Run Code Online (Sandbox Code Playgroud)
因为使用TBytes(和System::DynamicArray<System::Byte>)作为参数的重载版本在内部调用上述版本的Read和Write.
TStream您需要覆盖的最小虚拟方法是:
function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Write(const Buffer; Count: Longint): Longint; overload; virtual;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; virtual;
Run Code Online (Sandbox Code Playgroud)
如果要支持分配Size属性,则需要覆盖:
procedure SetSize(NewSize: Longint); overload; virtual;
procedure SetSize(const NewSize: Int64); overload; virtual;
Run Code Online (Sandbox Code Playgroud)
32位的实现SetSize必须调用64位SetSize.并且64位SetSize完成了工作.
如果不重写这些方法,则分配给流的Size属性将默默地执行任何操作.