record与Variant如何相互转化!! ( 积分: 100 )

  • 主题发起人 主题发起人 scu006
  • 开始时间 开始时间
S

scu006

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,最好能给我一个例子
 
如果有人回答了这个问题请回答我一份!谢谢!
 
我已经解决的了,谢谢!!!!!
有一点是必须要注意的,就是字段的类型必须是计算机的最小单位
有这样一个记录
TBSCallCommand = packed record
tpCmd : TBSType;
//指令主类型 DWORD START,STOP
tpSubCmd : TBSType;
//界面功能号 DWORD 401,402,403,404,405,
tpFunCmd : TBSType;
//设备功能号 DWORD 501,502,503,504,505
ClientId : TBSGlobalId;
//命令发送者 array[0..15] of char
DeviceIP : TBSGlobalId;
//设备所在IP array[0..15] of char
rTime : SYSTEMTIME;
//监测任务下达时间 WORD
end;
在客户段
function TForm1.RecordToVariant(Value: TBSCallCommand): OleVariant;
var
P: Pointer;
v: OleVariant;
begin
v:=VarArrayCreate([0,sizeof(TBSCallCommand)-1],varByte);
P:=VararrayLock(v);
move(Value,p^,sizeof(TBSCallCommand));
VarArrayUnlock(v);
result:=v;
end;
这样就完成了,同时在服务端
function TDataBack.OleVariantToRecord(v:OleVariant): TBSCallCommand;
var
p:pointer;
begin
p:=vararraylock(v);
move(p^,result,sizeof(TBSCallCommand));
vararrayunlock(v);
end;
这样就转化过来了
 
加个异常处理会更好吧!
P:=VararrayLock(v);
try
move(Value,p^,sizeof(TBSCallCommand));
finally
VarArrayUnlock(v);
end;
 
恩,会更好的,谢谢
 
后退
顶部