请问如何进行记录和oleVariant之间的转化
假如:有一个记录类型TARecord = Record
Name: string;
age: integer;
end;
如何转化成oleVariant通过DCOM传递出去呢,
到了中间层再转回来呢?
请指点
[解决办法]
procedure VariantToStream(const Data: OleVariant; Stream: TStream);
var
p: Pointer;
begin
p := VarArrayLock(Data);
try
Stream.Write(p^, VarArrayHighBound(Data,1) + 1); //assuming low bound = 0
finally
VarArrayUnlock(Data);
end;
end;
function StreamToVariant(Stream: TStream): OleVariant;
var
p: Pointer;
begin
Result := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(Result);
try
Stream.Position := 0; //start from beginning of stream
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(Result);
end;
end;
function RecToVariant(Rec:TMyRecArr):variant;
var
p:PChar;
begin
Result:=VarArrayCreate([0,SizeOf(Rec) - 1],VarByte);
p:=VarArrayLock(Result);
try
Move(Rec[1], p^, SizeOf(Rec))
finally
VarArrayUnlock(Result);
end;
end;
procedure VariantToRec(Value:variant): TMyRecArr;
var
p:PChar;
Size: Cardinal;
begin
size:=VarArrayHighBound(Value,1);
p:=VarArrayLock(Value);
try
Move(p^, Result[1], Size)
finally
VarArrayUnlock(Value);
end;
end;