解决方案 »
- Delphi2007中ActiveForm在哪里?谢谢
- 现在一Delphi动态库(没有类),如何用asp调用?(查到的资料基本是VB的Dll)
- DBconsts.pas问题
- 请各位高手给推荐两本VCL的书
- 为什么将adoquery的cursortype设为ctDynamic后RecordCount总是为-1?
- 有关安装Midas.dll文件的问题
- 关于用程序一次循环选中dxDBGird多条符合条件的记录?急!! 在大富翁3天没有解决,急啊!
- 给钱!
- 请问下面代码中诸如"if ret<>""Size >"之类的是什么东西?
- 求助Hank,我为什么不能成功地用ADO产生MS ACCESS97空数据库?
- 这个程序中窗体上应该加点什么,来实现查找相同文件名的数量
- 这个程序的窗体应该怎么添加
对,因为多语种,所以原来是Delphi7的程序,花了好长时间,才把这个改变成Delphi2010的,Char在2010里面是WideChar主要目前是发送的时候,已经是????? 所以接收到也变成了??? 就因为String[30]但是我去掉[30]又报错。。这代码页是拷贝别人的,自己对这块不大了解
TSendrec = packed record
msg: Array of Char;
end; 可以正常发送,但是接收的时候,就会报错,不清楚具体应该怎么写
是的,我Setlength了,发送过去可以,但是接收的时候,不清楚应该set多少,我setLength(Sendrec.msg, SizeOf(buffer))任然报错
是的,我Setlength了,发送过去可以,但是接收的时候,不清楚应该set多少,我setLength(Sendrec.msg, SizeOf(buffer))任然报错你分配多少空间就接收多少,这次收不完下次再收。你报错的原因应该是你传参数不对。你贴出你的代码,看看你怎么传缓冲区参数的。
procedure TForm2.IdUDPServerUDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
var
Sendrec: TSendrec;
buffer:array [0..2048] of Char;
str:string;
i:integer;
begin
SetLength(Sendrec.msg, SizeOf(buffer));
BytesToRaw(AData, buffer, SizeOf(buffer));
CopyMemory(@Sendrec, @buffer, SizeOf(Sendrec));
for I := 1 to Length(Sendrec.msg) do
begin
str := str + Sendrec.msg[i];
end; Memo1.Lines.Add(ABinding.IP + ' -> My: ' + str);
end;
for I := 0 to Length(Sendrec.msg) - 1 do断点看了下Sendrec.msg数据,全部是#0
CopyMemory那行改成这样
搞定了,最后没用这种方式,看了下一个帖子,使用了String => TBytes 直接转的方法,很简单的实现了 - -!不过还是谢谢哈。
搞定了,最后没用这种方式,看了下一个帖子,使用了String => TBytes 直接转的方法,很简单的实现了 - -!不过还是谢谢哈。
解决了就好,不过delphi的静态数组和动态数组取地址,是一个知识点,可以看下我之前总结的文章。
http://pb.itsong.com/2009/01/delphi_is_an_array_of_array_name_is_the_first_address.html