Beim Einlesen der Strings sollte nicht Result, sondern Result[1] verwendet werden, da hier der Zeichenpuffer des Ansistrings beginnt.
Delphi-Quellcode:
function LoadStrFromStream(const st: TMemoryStream): AnsiString;
var l: LongInt;
begin
st.ReadBuffer(l, SizeOf(l)); // -> beim ersten Durchlauf knallt es hier dann
SetLength(Result, l);
if l>0 then st.ReadBuffer(Result[1] ,l);
end;