[fpc-devel] tkLString vs tkAString

Ondrej Pokorny lazarus at kluug.net
Tue Nov 30 13:49:36 CET 2021

On 30.11.2021 13:43, Marc Weustink via fpc-devel wrote:
> On 30-11-2021 13:37, Michael Van Canneyt via fpc-devel wrote:
>> On Tue, 30 Nov 2021, Marc Weustink via fpc-devel wrote:
>>> Hi,
>>> I ran into an issue with a piece of ported Delphi (6) code and RTTI. 
>>> Part of the Delphi code was based on strings with a RTTI type 
>>> tkLString where in FPC the type appeared to be tkAString. Fixing 
>>> this was easy, but it made me wonder what the difference is between 
>>> them.
>>> From the documentation:
>>>  Source position: rttih.inc line 22
>>>   type TTypeKind = (
>>>   ...
>>>   tkLString,  Longstring property.
>>>   tkAString,  Ansistring property.
>>> So there is apparently a LongString type and an AnsiString type. 
>>> However if you search (google) the documentation on LongString, you 
>>> only find references to AnsiString.
>>> My question: What is the difference (if any) ?
>> This dates from long ago...
>> Longstring was an idea for a shortstring/ansistring kind of string - 
>> unlimited length but no reference counting.
>> But it was never fully implemented.
> Ah, that explains. So technically the delphi tkLString is the fpc 
> tkAString and the fpc tkLString does not exist.


The RTTI in FPC differs a little bit from the Delphi's and therefore 
IFDEFs are needed in shared code. E.g. tkBool and tkUChar from FPC don't 
exist in Delphi either.

I assume MvC knows more details - that is just what I stumped upon.


More information about the fpc-devel mailing list