INDY10的内存拷贝问题

changsn 2012-04-13 11:27:24
var
Login:CRLogin;
buffer:array[1..2048]of char;
begin
BytesToRaw(AData,buffer,SizeOf(AData));
if buffer[1]=SKLogin then
begin
CopyMemory(@login,@buffer[2],SizeOf(login));
memo1.Lines.Add(Login.Name);
end;
end;

把接收来的字节数组,转换成缓存,然后拷贝到自定义的,记录中,每次只可以接收1个字节。
...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzca 2012-04-13
  • 打赏
  • 举报
回复
SizeOf(login));
这个用错了。
login应该是它的类型,不是变量
看样子应该是 CRLogin
CopyMemory(@login,@buffer[2],SizeOf(CRLogin));
bdmh 2012-04-13
  • 打赏
  • 举报
回复
SizeOf(login),你确定是 1
mhhaifeng 2012-04-13
  • 打赏
  • 举报
回复
我怀疑是你乱用 SizeOf(X) 的问题
mhhaifeng 2012-04-13
  • 打赏
  • 举报
回复
function SizeOf(X): Integer;
Description Pass a Delphi variable reference to SizeOf to determine the number of bytes used to represent the variable. Pass a type identifier to SizeOf to determine the number of bytes used to represent instances of that type. SizeOf is useful for determining the amount of memory to specify for the FillChar, Move, or GetMem procedures.
山东蓝鸟贵薪 2012-04-13
  • 打赏
  • 举报
回复
建议楼主用showmessage();
测试出每一步的“结果”看看吧,
也可能是参数没有“传递”
mhhaifeng 2012-04-13
  • 打赏
  • 举报
回复
MainForm.IdUDPClient1.SendBuffer(RawToBytes(buffer,SizeOf(buffer)));

SizeOf(buffer)这样用行不? 没这样用过
为什么不直接写长度? 毕竟已确定


xhz8000 2012-04-13
  • 打赏
  • 举报
回复
两边大小都试过了,type
CRLogin=record
Name:string[20];
ID:string[20];
IP:string[20];
Port:Word;
end;

修改为这样吧!
CRLogin=record
Name:array[0..19] of char;
IP:array[0..19] of char
Port:Word;
end;
changsn 2012-04-13
  • 打赏
  • 举报
回复
两边大小都试过了,type
CRLogin=record
Name:string[20];
ID:string[20];
IP:string[20];
Port:Word;
end;

加上edit的内容,是66个字节
changsn 2012-04-13
  • 打赏
  • 举报
回复
procedure TMainForm.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
var
login:CRLogin;
buffer:array[1..2048]of Char;
begin
BytesToRaw(AData,buffer,SizeOf(AData));
CopyMemory(@login,@buffer,SizeOf(CRLogin));
memo1.Lines.Add(login.Name);
end;
[Quote=引用 2 楼 的回复:]
procedure CLogin;
var
Login:CRLogin;
buffer:array[1..2048]of char;
begin
Login.Name :=MainForm.Edit3.Text;
CopyMemory(@buffer,@login,SizeOf(CRLogin));
MainForm.IdUDPClient1.SendBuffer(RawToBytes(buffer,SizeOf(buffer)));
end;

SizeOf(login));
这个用错了。
login应该是它的类型,不是变量
看样子应该是 CRLogin
CopyMemory(@login,@buffer[2],SizeOf(CRLogin));
[/Quote]
总是不对……这次接收的是3个字节

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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