W dniu 2021-06-14 o 21:27, Michael Van Canneyt via fpc-pascal pisze:
On Mon, 14 Jun 2021, gabor via fpc-pascal wrote:
Why does TMemoryStream only implement one version of SetSize method?
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/classesh.inc?revision=49038&view=markup#l1225
The TStream class has two versions of SetSize method (virtual,
overload) - one with a parameter of LongInt type and the other with
the Int64 type. Since function is virtual, child classes can override
it and can be called from code, but then a version of the SetSize
function not implemented for a given platform in the TMemoryStream
class can be called.
The base method checks which one is overridden. So it does not matter
which one you override in the child.
The "other" one will always fall back to the method in TStream.
Unfortunately, on the 64bit platform it does not fully work. See the
project below.
program Project1;
{$mode objfpc}
uses
Classes;
type
TMyMemStream = class(TMemoryStream)
procedure Foo;
procedure Bar;
end;
procedure TMyMemStream.Foo;
begin
SetSize(10);
end;
procedure TMyMemStream.Bar;
begin
SetSize(Int64(10));
end;
var
MS: TMyMemStream;
begin
MS := TMyMemStream.Create;
MS.Foo;
WriteLn(MS.Size);
MS.Bar;
WriteLn(MS.Size);
MS.Free;
ReadLn;
end.
Michał.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal