2
我正在更新一些現有的Delphi代碼,以使用Delphi XE2在MacOS上進行編譯。在MacOS和Windows上,Delphi XE2靜態數組賦值不同
安裝了Delphi XE2 Update 3。
在Win32和Win64上,代碼的某個特定位可以按預期工作,並且在使用Delphi 4編譯到Delphi XE時也可以按預期編譯/運行。
但是,編譯MacOS時,同一段代碼不能以相同的方式工作。我們在Mac上也發生了一些崩潰 - 但這可能是XE2調試器。
type
TFixedSizeAnsiStringArray = array[0..255] of AnsiString;
procedure TForm1.Button1Click(Sender: TObject);
var
FirstArray: TFixedSizeAnsiStringArray;
SecondArray: TFixedSizeAnsiStringArray;
begin
FirstArray[0] := 'Apple';
FirstArray[1] := 'Banana';
FirstArray[2] := 'Pineapple';
// ...
SecondArray := FirstArray;
Memo1.Lines.Add(SecondArray[0]);
Memo1.Lines.Add(SecondArray[1]);
// ....
end;
在Windows上,SecondArray的所有元素都與FirstArray的元素相同。
但是在MacOS上(當它運行時),只有SecondArray的第一個元素具有正確的值。
使用for
循環很容易修復 - 但瞭解Windows和MacOS之間爲什麼不同會很好理解。
也許與使用AnsiString有關?