Bin (immer noch) dabei eine Scripter-Library von D5 auf Delphi XE zu portieren und nach gefühlten 1000 Char und PChar umwandlungen auf
Ansi/Wide und vielen weiteren spaßigen Sachen bin ich auf folgendes gestoßen:
Code:
procedure TCustomxyz.FToggleStrCase(var S : string);
var
i : integer;
len : integer;
a : string[1];
b : string[1];
begin
len := Length(S);
i := 1;
while i <= len do
begin
{...}
b := S[i];
a := AnsiUpperCase(b);
if a = b then
S[i] := AnsiLowerCase(b)[1]
else
S[i] := a[1];
inc(i);
end;
end;
Der Code sieht nun eigentlich recht unspektakulär aus, aber der Compiler meckert nun bei dem letzten else ("S[i] := a[1];") dort sieht er S[i] als Char und a[1] als AnsiChar.
Schauen wir uns deren Deklaration mal genauer an:
S ist ein String, a ist auch ein String, allerdings als String[1] deklariert. WTF?! Der kastet also automatisch ein String[1] als
Ansi und ein String als normalen (
Unicode) Char.
Sehe ich das so richtig? Das verwirrt mich doch jetzt ein wenig...