急!!!100分,请各位大虾帮忙解决:
用户在edit1中输入任意中文+4字符的数据帧头,总提示内存使用错误。
代码如下:procedure TForm1.Button2Click(Sender: TObject);
type
Tmsg = ^msg;
msg=packed record
Command:array[0..3] of char;
des:string;
end;
var
Mymsg:Tmsg;
s:string;
desLength:integer;//汉字总长度
begin
s:=edit1.text;
desLength:=length(s);
GetMem(Mymsg,desLength+4);//command占4字节
Mymsg.command[0]:='S';
Mymsg.command[1]:='E';
Mymsg.command[2]:='N';
Mymsg.command[3]:='D';
Mymsg.des:=s;
idtcpclient.WriteBuffer(Mymsg^,desLength+4);
FreeMem(Mymsg);
end;
用户在edit1中输入任意中文+4字符的数据帧头,总提示内存使用错误。
代码如下:procedure TForm1.Button2Click(Sender: TObject);
type
Tmsg = ^msg;
msg=packed record
Command:array[0..3] of char;
des:string;
end;
var
Mymsg:Tmsg;
s:string;
desLength:integer;//汉字总长度
begin
s:=edit1.text;
desLength:=length(s);
GetMem(Mymsg,desLength+4);//command占4字节
Mymsg.command[0]:='S';
Mymsg.command[1]:='E';
Mymsg.command[2]:='N';
Mymsg.command[3]:='D';
Mymsg.des:=s;
idtcpclient.WriteBuffer(Mymsg^,desLength+4);
FreeMem(Mymsg);
end;
解决方案 »
- delphi获取打印机列表
- 急啊,谢谢各位了
- 冲动的惩罚 --向 WGYKING(修罗是谁?!) 致歉!
- 哪位有类似 MSProject2000 中甘特图的控件?
- 回来了,就多放点分
- 散分!!
- 在线等待:有2000条链路,每条链路包含的节点数不一,从1到1000都有,除了Ttreeview还有什么控件可以用吗?要求美观清晰,操作方便。
- delphi xe2 FastReport的DesignReport无反映
- 有关报表打印的问题(如何自动换行显示)bow,thanks all
- 我要打印image1,在FastReport中放了一个picture框,如何才能预览并打印,我用的是fr3
- teechart 怎样得到这样的chart啊
- delphi 请教writeprocessmemory函数怎么用
procedure TForm1.Button2Click(Sender: TObject);
type
Tmsg = ^msg;
msg=packed record
Command:array[0..500] of char;
des:string;
end;
var
Mymsg:Tmsg;
s:string;
desLength:integer;//汉字总长度
begin
s:=edit1.text;
desLength:=length(s);
GetMem(Mymsg,desLength+4);//command占4字节
Mymsg.command[0]:='S';
Mymsg.command[1]:='E';
Mymsg.command[2]:='N';
Mymsg.command[3]:='D';
move(s[1],Mymsg.des[0],desLength); //这样子 。
idtcpclient.WriteBuffer(Mymsg^,desLength+4);
FreeMem(Mymsg);
end;
iLen: Integer;
sStr: string;
begin
iLen := 0;
AThread.Connection.ReadBuffer(iLen, SizeOf(iLen));
sStr := AThread.Connection.ReadString(iLen);
end;如果太长的数据就依次分为几个小包发送。
idtcpclient 这个是什么啊 是一个客户端么?
delphi 6 没有idtcpclient么?
Tmsg = ^msg;
msg = packed record
Command:array[0..3] of char;
des:string;
end;
var
Mymsg: Tmsg;按这样的结构定义的Tmsg记录类型, 你用 idtcpclient.WriteBuffer(Mymsg^,desLength+4); 发送出去的是Command记录域的内容和des这个字符串的地址值,而不是Command记录域的内容和des字符串的内容。如果des的内容可知其最大长度(比如最长为30个字符),则可以这样修改:
type
Tmsg = ^msg;
msg = packed record
Command:array[0..3] of char;
des:string[30];
end;idtcpclient.WriteBuffer(Mymsg^, SizeOf(msg));
Tmsg = ^msg;
msg = packed record
Command : array[0..3] of char;
desLength: Integer;
des : String;
end;
代码部分修改成这样:var
Mymsg: Tmsg;
s : string;
begin
s := edit1.text;
new(Mymsg);
Mymsg.command[0] := 'S';
Mymsg.command[1] := 'E';
Mymsg.command[2] := 'N';
Mymsg.command[3] := 'D';
Mymsg.desLength := length(s);
Mymsg.des := s;
//发送
idtcpclient.WriteBuffer(Mymsg.command, 4);
idtcpclient.WriteBuffer(Mymsg.desLength, Sizeof(Integer));
idtcpclient.WriteBuffer(Mymsg.des[1], Mymsg.desLength);
dispose(Mymsg);
end;