開発ブログ - TList を使ったプログラムの iOS へのポーティング

TList を使ったプログラムの iOS へのポーティング

カテゴリ : 
技術メモ » Delphi
執筆 : 
2013/12/20

まだ 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 へ置き換えてしまいましょう。

  • コメント (0)
  • トラックバック (0)

コメントの投稿

お気軽にコメントください : 投稿されたコメントは承認後に表示されます
プロダクツ

開発ブログ

Link

AD