On Thu, 27 Sep 2007 12:38:13 +0200 (CEST) [EMAIL PROTECTED] (Marco van de Voort) wrote:
> > [EMAIL PROTECTED] (Marco van de Voort) wrote: > > > A cast is really a cast. IOW the cast pchar(ansistring) is mostly > > > a no-op. Traditional C code then usually treats the #0 as end of > > > string. > > > > PChar(AnsiString) was a no-op typecast in the past and is nowadays a > > function. It checks whether the AnsiString is nil and if yes > > returns a pointer to a string containing one character: #0. > > > > That means: > > Pointer(AnsiString) <> Pointer(PChar(AnsiString)) > > > > To get a no-op typecase you can use: > > MyPChar:=PChar(Pointer(AnsiString)); > > Is this delphi compat, and if yes, what is this exactly for? I don't know. The change broke some lazarus code and now it is polluted by the ugly double type casts, just to get some no-op type casts. Because this fact is not widely known or often forgotten, many use the PChar() as simple type cast. That's why the lcl interfaces already got into troubles several times, so everytime we get strange errors I first search for these typecasts. Maybe we should mention this fact at a more prominent place in the wiki and docs. Mattias _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal