開発ブログ - TList を使ったプログラムの iOS へのポーティング
まだ Generics や TObjectList すらなかった時代に、 TList を使っていたプログラムを iOS へポーティングしてみたところ 実行時にエラーが?
昔はこんな風にして、いまでいう TObjectList
こんなコードが山のように書かれていたのです。
TOldList = class(TList)
private
function GetItems(Idx: Integer): TBar;
public
procedure Clear; override;
property Items[Idx: Integer]: TBar read GetItems; default;
end;
procedure TOldList.Clear;
var
i: Integer;
begin
for i := 0 to Count-1 do
Items[i].Free;
inherited;
end;
function TOldList.GetItems(Idx: Integer): TBar;
begin
Result := TBar(inherited Items[Idx]);
end;
このコード、今でも Win32 環境では全く問題なく動作します。
が、iOS で実行すると TOldList.Items[] へのアクセス時に、以下のようなエラーになってしまうのです。
アドレス xxxx でアクセス違反が発生しました
確かにコンパイル時に警告が出ていましたね。
AUTOREFCOUNT なコンパイラでは TList は deprecated のようです。
[DCC 警告] Unit5.pas(15): W1000 シンボル 'TList' を使用することは推奨されていません
実行時エラーになる理由はよくわかりませんでしたが、機械的に TObjectList