请问怎么传输结构体?

yinghuafeiwushi 2007-03-07 09:19:07
type
myrecord= record
m_name :integer;
m_id :integer;
end;
Pmyrecord =^myrecord;

服务器:
var
p:pointer;
c :Pmyrecord;
begin
c := new(Pmyrecord);
c.m_name :=0;
c.m_id :=0;
new(p);
getmem(p,1024);
memo1.lines.add(inttostr(Socket.ReceiveBuf(p^,1024)));
c := p;
caption :=c.m_name;
freemem(p,1024);
end;
客户端:
var
c :Pmyrecord;
p :pointer;
begin
c := new(Pmyrecord);
c.m_name :=333;
c.m_id :=5555;
getmem(p,1024);
p :=c;
memo1.lines.add(inttostr(ClientSocket1.Socket.SendBuf(p^,1024)));
FreeMem (P, 1024);
end;
为什么接收不到发送的数据,接收到的是非常大的象是地址的数据.
可以以发送指针的形式发送结构体内容吗?
有什么好的方法发送带有相同结构头的不同的结构体呢?
...全文
340 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahjoe 2007-03-09
  • 打赏
  • 举报
回复
memo1.lines.add( ClientSocket1.Socket.SendBuf(c, sizeof(c)) );
dabaicai 2007-03-07
  • 打赏
  • 举报
回复
没看出来你到底要问什么
不过你要是把指针和对象搞清楚点,上面看了下应该不是很麻烦的(没测试)
yinghuafeiwushi 2007-03-07
  • 打赏
  • 举报
回复
如果客户端写
V_PSmpPdu:=new(PSmpPdu);
V_PSmpPdu.FCrossID:=64;
V_PSmpPdu.FCommand:=6 ;
getmem(p,1024);
p :=V_PSmpPdu;
Fr_Main.ClientSocket1.Socket.SendBuf(p^,1024);
FreeMem (P, 1024);
传输没有任何问题
但是如果写成:
V_PSmpPdu:=new(PSmpPdu);
V_PSmpPdu := HexToStruct(DesData);
getmem(p,1024);
p :=V_PSmpPdu;
Fr_Main.ClientSocket1.Socket.SendBuf(p^,1024);
FreeMem (P, 1024);
其中HexToStruct(DesData);是一个函数,返回值为PSmpPdu类型的指针.就会出现错误
其中HexToStruct(DesData)函数为:
if First_DateID=$C5 then //查询阶段表
begin
FillChar( V_SmpStageTable, Sizeof( V_SmpStageTable ), 0 );
V_SmpStageTable.M_SmpBase.FCrossID := DesData[0]*256+DesData[1];
V_SmpStageTable.M_SmpBase.FType := SMP_GET_RESPONSE;
V_SmpStageTable.M_SmpBase.FCommand := 6;
V_SmpStageTable.C_PhasesTableNumber:= DesData[5];
Result:= PSmpPdu( @V_SmpStageTable );
Exit;
end;
其中V_SmpStageTable.M_SmpBase为PSmpPdu类型,即所有结构具有的相同的头
yinghuafeiwushi 2007-03-07
  • 打赏
  • 举报
回复
我的qq:13859070 如果有好招的加我,在线等待!非常感谢!
plax0850 2007-03-07
  • 打赏
  • 举报
回复
小老头说得对,指针搞清楚了就没有这些麻烦了。指针是地址。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧