Der Cast von einem String auf TObject ist nicht erlaubt.
Grund:
ein String unterliegt der Referenzzählung und wird von Delphi intern verwaltet.
Sobald also die Variable Wert in der Schleife überschrieben wird, geht der Referenzzähler auf 0 und der String existiert nicht mehr.
Ausweg:
ein richtiges Objekt verwenden
Delphi-Quellcode:
type
TKeyValueObject = class(TObject)
public
Key, Value : string;
end;
...
for i:= 0 to templist.Count-1 do
begin
keyobj := TKeyValueObject.Create;
keyobj.Key := GibmirBeleg(templist.strings[i]);
keyobj.Value := GibmirFStr(templist.strings[i]);
Liste.AddObject(keyobj.Key, keyobj);
end;
Um ein Speicherleck zu verhinden muss man die Objekte auch wieder freigeben:
Delphi-Quellcode:
procedure StringsFreeObjects(sl: TStrings);
var
i: Integer;
o: TObject;
begin
for i := sl.Count-1 downto 0 do
begin
o := sl.Objects[i];
if Assigned(o) then
begin
o.Destroy; // spart Zeit gegenüber .Free
sl.Objects[i] := nil;
end;
end;
end;