私はこの簡単なコードを持っています
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 のバグですか、修正する方法はありますか?