我正在尝试将我当前的Delphi 7 Win32代码转换为Delphi XE5 Android,只需要很少的更改,这样我的项目就可以从一系列Delphi版本和XE5的Android交叉编译到Win32.
从XE5开始,针对未来的语言会发生重大变化.其中一个变化是从零开始的字符串.
在具有基于1的字符串的旧版本中,以下代码是正确的:
function StripColor(aText: string): string;
begin
for I := 1 to Length(aText) do
Run Code Online (Sandbox Code Playgroud)
但现在这显然不对.建议的解决方案是使用:
for I := Low(aText) to High(aText) do
Run Code Online (Sandbox Code Playgroud)
这样,XE5 Win32处理基于1的字符串,而XE5 Android处理基于0的字符串.但是有一个问题 - 以前的Delphi版本(例如XE2)在这样的代码上输出错误:
E2198 Low cannot be applied to a long string
E2198 High cannot be applied to a long string
Run Code Online (Sandbox Code Playgroud)
我有很多字符串操作代码.我的问题是 - 如何修改和保持上面的代码可以在Delphi 7 Win32和Delphi XE5 Android中编译?
PS我知道我仍然可以在XE5中禁用ZEROBASEDSTRINGS定义,但这是不受欢迎的解决方案,因为在XE6中,这个定义可能会消失,并且所有字符串都将被强制为0.