tja, entweder zu sorgst dafür, daß "test" nie freigegeben/verändert wird, solange die Referenz in item.Data liegt,
oder du mußt eben doch die Referenzzählung beachten
Delphi-Quellcode:
var P: Pointer;
// zuweisen
String(P) := test;
item.Data := P;
// auslesen
test := String(item.Data);
// freigeben
P := item.Data;
String(P) := '';
oder du legst doch einen Record, mit deinem String, in item.Data ab
oder du gehst über einen PChar (natürlich mußt du dafür selber den Speicher reservieren und den Stringinhalt dareinkopieren), welchen du dann an item.Data übergibst.
(und freigeben nicht vergessen)