Mega Code Archive

 
Categories / Delphi / Examples
 

Convert variant to stream and then back

// Variant --> Stream var ov: OleVariant; ms: TStream; p: Pointer; begin ov := dmMain.ComConnection.AppServer.TimeZone; ms := TMemoryStream.Create; ms.Position := 0; p := VarArrayLock(ov); ms.Write(p ^, VarArrayHighBound(ov, 1)); //is it the best way to get the Variant's length? VarArrayUnlock(ov); ms.Position := 0; ...ms.Free; end; // Stream --> Variant function TTCanteenSvr.Get_TimeZone: OleVariant; var AStream: TStream; MyBuffer: Pointer; begin try AStream := TFileStream.Create(, fmOpenRead); Result := VarArrayCreate([0, AStream.Size - 1], VarByte); MyBuffer := VarArrayLock(Result); AStream.ReadBuffer(MyBuffer^, AStream.Size); VarArrayUnlock(Result); finally AStream.Free; end; //-------------------------------------------------------------------- //notice: I have asked this question on BDN, and David Lewis told me // to use the function VarArrayLock.