4

Read、Write、Seek メソッド、および Size プロパティと Position プロパティを再実装するだけの、古いバージョンの RADStudio 用の派生 Stream クラスがいくつかあります。

これらを XE3 に移植しようとしていますが、現在 (たとえば) 3 つのオーバーロードがReadあることがわかります。元のオーバーロードに加えて、TBytes をパラメーターとして受け取る 2 つです。

デルファイ

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;

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 */;

3 つすべてを実装する必要がありますか、それとも 1 つだけ実装する必要がありますか? で、一つだけならどれ…?

通常は VCL のソースから見つけることができますが、現在は試用版 (ソースなし) を入手したところです。

4

2 に答える 2

6

これらの署名を使用して読み取りおよび書き込みメソッドを実装するだけで済みます

function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Write(const Buffer; Count: Longint): Longint

TBytes(および)をパラメーターとして使用するバージョンをオーバーロードSystem::DynamicArray<System::Byte>すると、上記のバージョンの読み取りおよび書き込みが内部的に呼び出されるためです。

于 2012-12-18T14:16:30.480 に答える
6

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;

プロパティへの割り当てをサポートする場合Sizeは、オーバーライドする必要があります。

procedure SetSize(NewSize: Longint); overload; virtual;
procedure SetSize(const NewSize: Int64); overload; virtual;

32 ビットの実装はSetSize64 ビットを呼び出す必要がありますSetSize。そして、64ビットSetSizeは仕事をします。

これらのメソッドをオーバーライドしないと、ストリームのSizeプロパティに代入しても暗黙のうちに何も行われません。

于 2012-12-18T15:39:07.230 に答える