How to convert a TMemoryStream to an OLE variant and vice versa (Views: 27)
Problem/Question/Abstract: How to convert a TMemoryStream to an OLE variant and vice versa Answer: function MemoryStreamToOleVariant(Strm: TMemoryStream): OleVariant; var Data: PByteArray; begin Result := VarArrayCreate([0, Strm.Size - 1], varByte); Data := VarArrayLock(Result); try Strm.Position := 0; Strm.ReadBuffer(Data^, Strm.Size); finally VarArrayUnlock(Result); end; end; function OleVariantToMemoryStream(OV: OleVariant): TMemoryStream; var Data: PByteArray; Size: integer; begin Result := TMemoryStream.Create; try Size := VarArrayHighBound(OV, 1) - VarArrayLowBound (OV, 1) + 1; Data := VarArrayLock(OV); try Result.Position := 0; Result.WriteBuffer(Data^, Size); finally VarArrayUnlock(OV); end; except Result.Free; Result := nil; end; end; |