我正在尝试将我当前的 Delphi 7 Win32 代码以最小的更改转换为 Delphi XE5 Android,以便我的项目可以从一系列 Delphi 版本交叉编译为 Win32,并从 XE5 交叉编译为 Android。
从 XE5 开始,针对未来的语言发生了重大变化。其中一项更改是从零开始的字符串。
在具有基于 1 的字符串的旧版本中,以下代码是正确的:
function StripColor(aText: string): string;
begin
for I := 1 to Length(aText) do
但现在这显然是不对的。建议的解决方案是使用:
for I := Low(aText) to High(aText) do
这样,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
我有很多字符串操作代码。我的问题是 - 如何修改并保持上述代码可在 Delphi 7 Win32 和 Delphi XE5 Android 中编译?
PS 我知道我仍然可以在 XE5 中禁用 ZEROBASEDSTRINGS 定义,但这是不受欢迎的解决方案,因为在 XE6 中这个定义可能会消失,并且所有字符串都将被迫从 0 开始。