首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

TMemoryStream.Create回到总为空句柄为什么

2013-01-02 
TMemoryStream.Create返回总为空句柄为什么?各位大虾好,我想用一个内存流去读取一个已有值的文件流中了部

TMemoryStream.Create返回总为空句柄为什么?
各位大虾好,我想用一个内存流去读取一个已有值的文件流中了部份内容,因为文件流中的那部份内容进行了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中好像就会越界,跟没初始化一样。请各位帮下忙,谢谢!
[解决办法]
TMemoryStream.Create;没有句柄之说法
它其实是建立内存空间,看到()都是正常的(它就是这么表示的)
真想知道它是怎么工作的,去研究它实现的源码吧

至于越界问题,就读取长度超出了你的数据长度

热点排行