首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请教怎么进行记录和oleVariant之间的转化

2012-02-07 
请问如何进行记录和oleVariant之间的转化假如:有一个记录类型TARecordRecordName:stringage:integerend

请问如何进行记录和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;


热点排行