3

我正在将应用程序升级到 Delphi 2009。该应用程序使用 Soap,我们使用 Zlib 压缩肥皂请求和响应流。这在 Delphi 2006 中运行良好,但在 Delphi 2009 中却不行。

所以我回到Delphi 2006,改用FastZlib。它在 Delphi2006 中一切正常,但在 Delphi 2009 中不起作用,我得到解压缩错误。

有没有其他人有这个问题?

我该如何解决这个问题?

桑迪普

4

5 回答 5

0

可能值得尝试的东西 - 压缩您的数据,然后对其进行 UUENCODE,然后在另一端反转该过程。这将检测某些代码是否没有正确处理嵌入的零。

抱歉,这只是帮助您缩小问题范围的部分解决方案。

于 2009-06-11T21:38:54.257 回答
0

在 D2009 中你可以使用 ZCompress/ZDecompress 代替 CompressBuf/DecompressBuf
我测试它没有问题。

于 2013-03-01T04:32:30.757 回答
0

我刚刚查看了内置的 Zlib.pas,它似乎已针对 D2009 进行了正确更新。什么给你带来问题?

于 2009-06-03T12:39:25.260 回答
0

在 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 中工作?

于 2009-06-03T21:49:46.800 回答
0

原始海报清楚地说明了这个问题:CompressBuf 和 DecompressBuf 都消失了。

我还有一个项目在 D7 中编译得很好,但在 D2010 中编译失败,因为它找不到“CompressBuf”或“DecompressBuf”。

使用 D7 非常令人愉快的 find 命令进行搜索,将例程定位在 c:\Program Files\Borland\Delphi7\Source\Rtl\Common\ZLib.pas

但是使用 D2010 的(单独的尴尬)“在文件中查找”命令搜索无法在任何地方找到 CompressBuf 或 DecompressBuf。

升级 IDE 会导致项目中使用和需要的例程消失,这非常令人不安!

于 2010-01-25T16:29:03.177 回答