TListViewいくつかのデータを視覚化して保存するために使用するプログラムがあります。TListitemの data プロパティには、レコードへのポインタが次のように入力されます。
type
TWatch = record
name : string;
path : string;
//...
end;
procedure TfrmProcessWatcherMain.AddWatchToListView(AWatch: TWatch);
var
ANewWatch : TListItem;
begin
ANewWatch := lvWatches.Items.Add; //lvWatches is TListview
//...
ANewWatch.Data:= @AWatch;
end;
どういうわけかこのデータを取得しようとすると、アクセス違反エラーが発生します。すべてが合法であるように見えるので、これは私にとってまったく驚きです。取得のコードは次のとおりです。
if(lvWatches.Selected <> nil) then begin
tempWatch := TWatch(lvWatches.Selected.Data^); // AV here
ShowMessage(tempWatch.name);
またAWatch、最初の関数に渡されるものは、
WatchList : TList<TWatch>;
そのため、他の方法を使用してアクセスできます