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