Trotzdem ist das falsche Handling von Unicodestrings ziemlich sicher der Fehler:
Delphi-Quellcode:
SetLength(CompressedFile, InStream.Size);
InStream.Read(CompressedFile[0], InStream.Size);
Du hast einen Stream der Länge 400. Nun setzt du die Länge des Strings auf 400, sprich du hast dort 800 Byte in dem String. Dann packst du die 400 Byte aus der Datei in die ersten 200 Zeichen des Strings. Die anderen 200 Zeichen des Strings werden nicht beschrieben.
Was da ZDecompressStr draus macht, weiß ich nicht, aber sicher nix Gutes...
Bitte schaut euch doch mein Codebeispiel mal etwas genauer an, Leute! Ich setze hier NICHT den String auf Länge 400, sondern die TBytes-Variable, also ein Array. Und das ist auch völlig in Ordnung so, weil da ja zu aller erst mal die Rohdaten reingepackt werden müssen, bevor das Array an die ZDecompressStr-Funktion übergeben wird.