各位大虾好,我想用一个内存流去读取一个已有值的文件流中了部份内容,因为文件流中的那部份内容进行了ZLIB压缩,
但我create内存流的时候总是返回空值,读取后句柄还是空的请哪位大虾指教一下。
   inS:TMemoryStream;
begin
   Stream.Seek (position+4, 0);
   Stream.Read (imginfo, sizeof(TWMImageInfo)+FOffset);
   FX[index]:=ImgInfo.px;
   FY[Index]:=ImgInfo.py;
   lsDib.Width := imginfo.Width   lsDib.Height := imginfo.Height;
   num:=imginfo.Width * imgInfo.Height * 2;   ins:=TMemoryStream.Create; //这里执行后结果为()空。无句柄
   ins.CopyFrom(stream,num);//这里能读取,但ins还是为();
   ins.Seek(0,0);
   DBits := lsDib.PBits;
   ins.Read (DBits^, num); //  Stream.Read (DBits^, imginfo.Width * imgInfo.Height * 2); //FBytesPerPixels: 1(256) 2(16位) 4 8
  原来的语句是上面这句。我现在想做的是把DBits的内容读到流中进行ZLIB解压,现在我的流变量用在TDecompressionStream.Create中好像就会越界,跟没初始化一样。请各位帮下忙,谢谢!

解决方案 »

  1.   

    TMemoryStream.Create;没有句柄之说法
    它其实是建立内存空间,看到()都是正常的(它就是这么表示的)
    真想知道它是怎么工作的,去研究它实现的源码吧至于越界问题,就读取长度超出了你的数据长度
      

  2.   

    那TDecompressionStream.Create就出现异常那是什么原因呢?我读写的字节数都是一样的啊。
      

  3.   

    我在另外一个例子中同样用TmemoryStream.create建立一个实例,有memory,size,position等数据,在我现有程序中查看就是为(),这是为什么吖。晕。现在基本可以排除代码的问题,是不是与其它库放在一起引起的原因呢?
      

  4.   

    我知道是什么原因了。我日,是在LIB里没有将$(DELPHI)\Lib\Debug加进去。谢谢KK