发送数组的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 nanshan
  • 开始时间 开始时间
N

nanshan

Unregistered / Unconfirmed
GUEST, unregistred user!
Tpackdata = record
Cmd: word;
text: string;
data: Pointer;
size:integer;
end;
var
d: TPackdata;
SendBuf(d, sizeof(d));
Receivebuf(d, sizeof(d));

这样会报错呀
 
Tpackdata = record
Cmd: word;
text: string;
data: Pointer;
size:integer;
end;
var
d: TPackdata;
SendBuf(d, sizeof(d));
Receivebuf(d, sizeof(d));

这样会报错呀
 
肯定错误三,Tpackdata = record
Cmd: word;
text: string;
data: Pointer;
size:integer;
end;
中,text: string只是一个指向字符串的指针,同样data: Pointer,也是一相指针,只是无类型的罢了,你发过去的只是指针所指的内存位置,并没有把数据真正的发过去
 
请问我该怎么做呢? 谢谢
 
你可以重新定义一个结构如
Tpackdata = record
Cmd: word;
text: array[0..2034] of char;
size:integer;
end;
数据先移支text里,再发送,可以使用MOVE,MOVE(源,目的,大小)
 
text: string;
data: Pointer;
这两个是指针
发送会有问题的
应该象楼上一样发才行
或者全部move或copy到一个string中
 
type
Tpackdata = record
Cmd: word;
Asize:dword;
Adata: array[0..10000] of pchar;
end;

发送是这样的
procedure TForm1.ACMInW1Data(Sender: TACMComponentW; AData: PAnsiChar;
ASize: Cardinal);
var
d: TPackdata;
begin
fillchar(d, sizeof(d), 0);
d.Cmd := 2;
d.Asize:=ASize;
MOVE(AData,d.Adata,ASize);
SendBuf(d, Sizeof(TPackdata));
end;

接收是这样的
procedure TForm1.tcpClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
d: Tpackdata;
Adata: pchar;
Asize: dword;
begin
fillchar(d, sizeof(Tpackdata), 0);
Socket.ReceiveBuf(d, sizeof(Tpackdata));
ASize:=d.Asize;
if d.Cmd = 2 then
begin
MOVE(d.Adata,Data,ASize);//在这里有错呀,不能将内容移动到ADATA
ACMOutW1.PlayBack(Adata, ASize);
end;
end;
请帮我指出以上怎么错了。谢谢
能留下QQ吗,我的邮箱7RKJ@163.COM
 
MOVE(AData^,d.Adata,ASize);
SendBuf(d, Sizeof(TPackdata));

QQ:316107426
 
我来晚了,楼上都说过了,我再补充一点:record中的string 不能超过255个字符的。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
598
import
I
I
回复
0
查看
1K
import
I
I
回复
0
查看
550
import
I
后退
顶部