XE2 TIdCompressorZLib解压缩 gzip TStream
本帖最后由 nennenpow 于 2012-06-05 16:59:57 编辑 您们好,初次在此发问
目前希望能使用TIdHTTPProxyServer读取gzip压缩的内容
我的程式如下
void __fastcall TForm3::MyProxyHTTPDocument(TIdHTTPProxyServerContext *AContext, TStream *&VStream)
{
Log("===============Receive Response===============");
Log("Type: " + AContext->Command);
Log("Target: " + AContext->Target);
if (AContext->Headers->Values["Content-Encoding"] == "gzip") {
Log("GZIP!!!!");
try{
TStringStream* OutStream = new TStringStream();
zb->DecompressStream(VStream,OutStream,0);
Log(OutStream->DataString);
OutStream->Free();
}catch(Exception *e){
Log(e->ToString());
}
}
我的环境是C++ XE2
其中zb 是一个TIdCompressorZLib物件
执行时会一直出现
ZLib Error (-6)
我上网找解答时,有些人有提到TIdCompressorZLib XE2 有问题
因此希望能确定是我的程式有错误,或是如果TIdCompressorZLib有问题的话,我应该如何解决呢?
谢谢!
[最优解释]
试一试 TIdCompressorZLib 的 DecompressGZipStream 方法。
[其他解释]
謝謝你的回應!
我將程式
zb->DecompressStream(VStream,OutStream,0);
改成
Log("Start");
zb->DecompressGZipStream(VStream,OutStream);
Log("End");
在release模式下會停在那一行程式
在debug模式下會出現
First chance exception at $00000038. Exception class $C0000005 with message 'access violation at 0x00000038: read of address 0x00000038'.
不知道是什麼什麼問題...
還是非常謝謝你的回答!
[其他解释]
谢谢你的回应!
我将程式
zb->DecompressStream(VStream,OutStream,0);
改成
Log("Start");
zb->DecompressGZipStream(VStream,OutStream);
Log("End");
在release模式下会停在那一行程式
在debug模式下会出现
First chance exception at $00000038. Exception class $C0000005 with message 'access violation at 0x00000038: read of address 0x00000038'.
不知道是什么什么问题...
还是非常谢谢你的回答!
[其他解释]
看起来象是访问了一个值为NULL的对象。你确认VStream和OutStream都正确初始化,并且,VStream中包含有效的GZip压缩数据?
[其他解释]
VStream 是拜访Google 的结果,我有试着把他写到.gz file可以解压缩
OutStream就是单纯new 一个物件
TStringStream* OutStream = new TStringStream();
我有试过用TMemoryStream
但还是一样的问题
谢谢!
[其他解释]
Finally
I use zlibex to do it
http://www.base2ti.com/
[其他解释]
我也遇到一样的问题,xe2中的TIdCompressorZLib确实有问题,还是别偷懒去下载
[其他解释]
Update: TIdCompressorZLib works in XE3