我有这个简单的代码
procedure TForm2.btn1Click(Sender: TObject);
var s : TStringList;
function compare(s : TStringList; i1, i2 : integer) : integer;
begin
result := CompareText(s[i1], s[i2]);
end;
begin
s := TStringList.Create;
try
s.add('s1');
s.add('s2');
s.add('s3');
s.CustomSort(@compare);
finally
s.free;
end;
end;
当我将其编译为 32 位时,它按预期工作,但使用 64 位时出现访问冲突。对于函数比较中的 64 位版本,s = nil. i2 = some random value
;
compare
如果我在函数之外提取函数,即使对于 Win64 目标,它也可以按预期btn1Click
工作。
它是 System.Classes 的错误,有什么办法可以修复吗?