Zlib в Delphi 2009 - PullRequest
       32

Zlib в Delphi 2009

3 голосов
/ 03 июня 2009

Я обновляю приложение до Delphi 2009. Приложение использует Soap, а мы сжимаем потоки запросов и ответов мыла с помощью Zlib. Это отлично работает в Delphi 2006, но не в Delphi 2009.

Итак, я вернулся в Delphi 2006 и перешел на использование FastZlib. В Delphi2006 все работало нормально, но не работает в Delphi 2009, и я получаю ошибки распаковки.

Кто-нибудь еще имел эту проблему?

Как мне исправить это?

Sandeep

Ответы [ 5 ]

0 голосов
/ 01 марта 2013

в D2009 вы можете использовать ZCompress / ZDecompress вместо CompressBuf / DecompressBuf
Я проверяю это и нет проблем.

0 голосов
/ 25 января 2010

Оригинальный постер прояснил проблему: CompressBuf и DecompressBuf ушли.

У меня также есть проект, который прекрасно компилируется в D7, но не компилируется в D2010, потому что он не может найти "CompressBuf" или "DecompressBuf".

Поиск с использованием очень приятной команды поиска D7 находит процедуры в c: \ Program Files \ Borland \ Delphi7 \ Source \ Rtl \ Common \ ZLib.pas

Но при поиске с помощью команды D2010 (неуклюжая отдельная) «Найти в файлах» не удается найти CompressBuf или DecompressBuf в любом месте.

Очень неприятно, что обновление IDE приводит к исчезновению процедур, используемых и необходимых в проектах!

0 голосов
/ 04 июня 2009

В Delphi 2006 у меня были следующие методы сжатия и распаковки с использованием Zlib (из Delphi 2006)

procedure CompressStream(inpStream, outStream: TStream);
var
  InpBuf, OutBuf: Pointer;
  InpBytes, OutBytes: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  try
    GetMem(InpBuf, inpStream.Size);
    inpStream.Position := 0;
    InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
    CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
    outStream.Write(OutBuf^, OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
end;


{ Decompress a stream }
procedure DecompressStream(inpStream, outStream: TStream);
var
  InpBuf, OutBuf: Pointer;
  OutBytes, sz: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  sz     := inpStream.Size - inpStream.Position;
  if sz > 0 then 
    try
      GetMem(InpBuf, sz);
      inpStream.Read(InpBuf^, sz);
      DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
      outStream.Write(OutBuf^, OutBytes);
    finally
      if InpBuf <> nil then FreeMem(InpBuf);
      if OutBuf <> nil then FreeMem(OutBuf);
    end;
  outStream.Position := 0;
end;

Что я должен изменить, чтобы они работали в Delphi 2009?

0 голосов
/ 12 июня 2009

Что-то, что может стоить попробовать - сжать ваши данные, а затем UUENCODE это, а на другом конце, полностью изменить процесс. Это обнаружит, если некоторый код не имеет дело со встроенными нулями.

Извините, это только частичное решение, которое поможет вам сузить проблему.

0 голосов
/ 03 июня 2009

Я только что просмотрел встроенный Zlib.pas, и он, кажется, был обновлен для D2009 должным образом. Что вызывает у вас проблемы?

...