博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

byte数组与olevariant互相转换(转)

Posted on 2012-06-21 16:24  对镜弹箜篌  阅读(400)  评论(0编辑  收藏  举报
uses activex; function Stream2OleVariantBytes(const Stream:TStream):OleVariant; var Data:Pointer; begin Result := VarArrayCreate([0,Stream.Size-1],varByte); Data := VarArrayLock(Result); try Stream.Position := 0; Stream.Read(Data^,Stream.Size); finally VarArrayUnlock(Result); end; end; procedure OleVariantBytes2Stream(const VValue:OleVariant; Stream:TStream); var Data:Pointer; V:OleVariant; begin Data := VarArrayLock(VValue); try Stream.Seek(0,soFromEnd); Stream.Write(Data^,(VarArrayHighBound(VValue,1)-VarArrayLowBound(VValue,1)+1) * SafeArrayGetElemSize(PSafeArray(TVarData(VValue).VPointer))) finally VarArrayUnlock(VValue); end; end; procedure TForm1.FormCreate(Sender: TObject); var V:OleVariant; m:TMemoryStream; begin m:= TMemoryStream.Create; try Memo1.Lines.SaveToStream(m); V:=Stream2OleVariantBytes(m); m.Clear; Memo2.Lines.SaveToStream(m); OleVariantBytes2Stream(V,M); m.Position := 0; Caption := IntToStr(m.Size); Memo2.Lines.LoadFromStream(m); finally m.Free; end; end; ---power by 僵哥 3Q