[fpc-pascal] TMemoryStream.SetSize question.
    Michael Van Canneyt 
    michael at freepascal.org
       
    Mon Jun 14 22:25:16 CEST 2021
    
    
  
On Mon, 14 Jun 2021, gabor via fpc-pascal wrote:
> 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.
Sorry, I was mixing up seek and setsize.
Indeed. You should not be calling the integer SetSize() directly.
People creating descendent classes are expected to know what to do, 
i.e. to use the 64-bit version.
Michael.
    
    
More information about the fpc-pascal
mailing list