我已经解决的了,谢谢!!!!!
有一点是必须要注意的,就是字段的类型必须是计算机的最小单位
有这样一个记录
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
ointer;
begin
p:=vararraylock(v);
move(p^,result,sizeof(TBSCallCommand));
vararrayunlock(v);
end;
这样就转化过来了