3

アプリをDelphi2009にアップグレードしています。アプリはSoapを使用し、Zlibを使用してsoapの要求と応答のストリームを圧縮します。これはDelphi2006では正常に機能しますが、Delphi2009では機能しません。

そこで、Delphi 2006に戻り、FastZlibを使用するように変更しました。Delphi2006ではすべて正常に機能しましたが、Delphi 2009では機能せず、解凍エラーが発生します。

他の誰かがこの問題を抱えていましたか?

これを修正するにはどうすればよいですか?

Sandeep

4

5 に答える 5

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

試してみる価値があるかもしれない何か - データを圧縮してから UUENCODE し、反対側でプロセスを逆にします。これにより、一部のコードが埋め込まれたゼロを適切に処理していないかどうかが検出されます。

申し訳ありませんが、これは問題を絞り込むのに役立つ部分的な解決策にすぎません。

于 2009-06-11T21:38:54.257 に答える
0

元のポスターは問題について明確でした: CompressBuf と DecompressBuf はなくなりました。

また、D7 では正常にコンパイルされるプロジェクトもありますが、「CompressBuf」または「DecompressBuf」が見つからないため、D2010 ではコンパイルに失敗します。

D7 の非常に便利な find コマンドを使用して検索すると、c:\Program Files\Borland\Delphi7\Source\Rtl\Common\ZLib.pas にあるルーチンが見つかります。

しかし、D2010 の (ぎこちなく別の) "Find in Files" コマンドで検索すると、CompressBuf または DecompressBuf がどこにも見つかりません。

IDE をアップグレードすると、プロジェクトで使用されたり必要とされたりするルーチンが消えてしまうのは非常に気がかりです!

于 2010-01-25T16:29:03.177 に答える
0

D2009 では、CompressBuf/DecompressBuf の代わりに ZCompress/ZDecompress を使用できます
。テストしましたが、問題はありません。

于 2013-03-01T04:32:30.757 に答える