[fpc-pascal] BlockWrite of dynamic arrays
Bo Berglund
bo.berglund at gmail.com
Sun Jul 30 08:20:42 CEST 2017
I am converting older code to move from AnsiString to TBytes as
non-text data container. While doing it I am using conditionals so I
don't destroy the working code until I have verified that the TBytes
usage is OK.
Now I have encountered use of BlockWrite where I would like to do the
following:
1) Change variable definitions from
F: File of AnsiChar;
{$IFDEF USE_ANSISTRING}
Buffer: AnsiString;
{$ENDIF}
to
F: File;
{$ELSE IFDEF USE_TBYTES}
Buffer: TBytes;
{$ENDIF}
2) Specifically set the record length to 1 using
Reset(F, 1);
and
Rewrite(F,1)
3) Change the BlockWrite command from
BlockWrite(F, Buffer[1], Length(Buffer));
to
BlockWrite(F, Buffer, Length(Buffer));
Note that I would like to *not* specify the index of the first element
of the array so that the same code can work for both cases depending
on conditional setting.
But I am worried that Buffer will reference a different memory
location than Buffer[0].
So are these two calls equivalent when Buffer is an AnsiString or a
TBytes array:
BlockWrite(F, Buffer[0], Length(Buffer));
BlockWrite(F, Buffer, Length(Buffer));
--
Bo Berglund
Developer in Sweden
More information about the fpc-pascal
mailing list