Tony Whyman wrote on Wed, 18 May 2016:

I've been looking at some old code which still seems to work in fpc 3.0.0 - but is it safe? The code looks like:

{$mode delphi}

var Buf: PChar;
      s: string;
begin
Buf := LoadString; {returns a pointer to an arbitrarily long null terminated string}

  s := string(Buf); {seems to work - but should it?}
end;

Why shouldn't it?

The above has been around since Delphi days and has never caused trouble, but I am certainly wondering if this coercion is safe anymore given the introduction of AnsiString code pages.

Why would that make any difference?

In particular, see http://wiki.freepascal.org/FPC_Unicode_support#PAnsiChar.2FAnsiChar and the definition of "plain ansistring" in http://wiki.freepascal.org/FPC_Unicode_support#Declared_code_page

To repeat what I said in about every message in the previous disinformation thread on this topic: everything will work exactly the same in FPC 2.6.4 and FPC 3.0 if you use the same types (with the same effective modes/modeswitch) in both FPC versions, except for utf8string (which is an alias for ansistring in FPC 2.6.4, and an ansistring(CP_UTF8) in FPC 3.0).


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to