怎样把二进制数组恢复为记录(100分)

  • 主题发起人 主题发起人 bnulaw
  • 开始时间 开始时间
B

bnulaw

Unregistered / Unconfirmed
GUEST, unregistred user!
因为远程数据模块的接口函数只能回传数组,所以在在服务器端我用move把一个记录放到
一二进制数组里传回客户端,但在客户端我怎样把这个二进制数组还原为我原来的记录呢?
用move把内存拷贝到记录变量的内存里不行,取出来的记录的字段的值是空白
 
怎么放的就怎么去取, 你把两段代码发上来看看.
 
必须手工复制回去
 
服务器端:
l_teacher为一TTeacher类型的变量,已经赋值
tmp_len:=sizeof(TTeacher);
Result:=Vararraycreate([0,tmp_len-1],varbyte);
tmp_p:=vararraylock(Result);
try
move(l_teacher,tmp_p^,tmp_len);
finally
vararrayunlock(result);
end;

客户端:
tmp_len:=sizeof(TTeacher);
move(tmp_oleVariant,g_UserInfo,tmp_len);

这时showmessage(g_userinfo.field1)为空白,通过watch可以看到g_userinfo是有很多内容
的,但不是字符串,是不是涉及到byte to char 的问题?
 
你的方法有问题, 先把它转换成 array of Byte, 然后再用MOVE,之后再把它传送到
vararray数组中发送, 接收时反过来就可以了.
 
function Tstat_acf.varianttorecords(v: olevariant): TTeacher;
var
p:pointer;
begin
p:=vararraylock(v);
move(p^,result,sizeof(TTeacher));
vararrayunlock(v);
end;
 
谢谢apache,想偷懒没有定义pointer,想不到真有问题
 
后退
顶部