function ApplyPatch(OldData, Patch: String): String; var OldStream, PatchStream, NewStream: TMemoryStream; X: Integer; begin OldStream := StringToStream(OldData); PatchStream := StringToStream(Patch); WriteLn(Format('Patch verification: %s', [StreamToString(PatchStream)])); WriteLn(Format('Patch verification: %s', [StreamToString(PatchStream)])); NewStream := TMemoryStream.Create; try bpatch_(OldStream, NewStream, PatchStream); Result := StreamToString(NewStream); finally FreeAndNil(OldStream); FreeAndNil(PatchStream); FreeAndNil(NewStream); end; end; function StringToStream(Value: String): TMemoryStream; begin Result := TMemoryStream.Create; Result.WriteBuffer(Value[1], Length(Value)); Result.Position := 0; end; function StreamToString(Stream: TStream): String; var OldPos: Int64; begin SetLength(Result, Stream.Size); OldPos := Stream.Position; Stream.Position := 0; Stream.WriteBuffer(Result[1], Length(Result)); Stream.Position := OldPos; end;