Das ganze natürlich so, dass der Code mit IFDEFs optional auch noch abwärtskompatibel zu der Quell-Delphiversion bleibt.
Abwärtskompatiblität wirds nicht geben. Aber die umbauarbeiten bezüglich Strings auf .net/java-"Kompatibilität" ist ja mit den entsprechenden String-Methoden möglich.
Warum sollen IFDEFS nicht gehen?
Code:
IFDEF RTLVERSION < "XE.n.Version"
i := pos('x',s);
if i > 0 then ...
ELSE
i := s.indexof('x');
if i > -1 then ...
ENDIF
Am schönsten wäre es aber, wenn der String ein "1-based String" bleibt und für die zerobased Strings einfach ein neuer Typ mit eigenem Namen eingeführt wird. Der XE"n" Compiler könnte dann im Hintergrund die Strings in zerobased Strings verdrehen und "ZString" 1:1 als 0-basierten String verarbeiten. Dann eventuell noch ein Hinweis beim kompilieren "Variable S ist aus String deklariert. Ändern Sie die Deklaration in "S:ZString" um die interne Konvertierung zu umgehen...".