Hi Hans
Good to hear from you mate, I hope all is well on your end of things =^
It should work straight out of the box

Nice to hear that it does

Here's the short story:
@lar unwillingly stumbled upon a bug in 'TStrings'

So a couple of us tried to help him out and got to analyzing the code in 'TStrings'. @BrunoK noticed that the current implementation doesn't cater for the objects when calling 'Reverse', it wipes them out

@Zvoni noticed that calling 'Reverse' alone didn't reverse itself and @Thaddy tried to call it with itself, to no avail...
So in all togetherness, we figured it out and while the rest cooked up a bug-report and filed it, I implemented the changes and features in 'IStrings'.
The net-result is:
a Reintroduced 'function Reverse: TStrings;' { not much changed }
a Reintroduced 'procedure Reverse(aList: TStrings);' { includes objects and self }
a New 'function ReverseEx: IStrings;' { returns a com-object - no freeing after use }
a New 'procedure ReverseSelf;' { does what the name says }
function TiStringList.Reverse: TStrings; { reintroduce }
begin
Result:= TStringsClass(Self.ClassType).Create;
try Reverse(Result);
except FreeAndNil(Result); Raise; end;
end;
procedure TiStringList.Reverse(aList: TStrings); { reintroduce }
var li: ptrint;
begin { the existing one in classes wipes the objects -- they were gone afterwards!!! }
if aList = Self then begin ReverseSelf; exit; end; { someone might do this }
for li:= inherited Count-1 downto 0 do
aList.AddObject(Strings[li],Objects[li]); { copy strings & objects in reverse order to aList }
end;
function TiStringList.ReverseEx: IStrings;
begin
Result:= CreStrings; { we need a new result stringlist }
Reverse(Result.AsTStrings); { now get the reversed result from reintroduced method }
end;
procedure TiStringList.ReverseSelf;
var lsl: IStringList; { we need an interim list }
begin
lsl:= ReverseEx as IStringList; { fetch our own reverse }
AssignEx(lsl); { now clear ourselves and assign the reverse list to us }
end;
I made all the changes in FPC-release / Lazarus-release, as to make sure, there would be no surprises

You may notice a 'blob.istrlist.inc' in the 'IStringlist' repo, that's for easy integration in MVP-Setup \o/\ö/\o/
Pheeewwww, Glad it works -- Happy coding mate =^
Regards Benny