发送方代码:procedure TForm2.Button1Click(Sender: TObject);
var
Data:copydatastruct;
MsgText:pchar;
begin
msgtext:=#0;
MsgText:=pansichar(edit1.Text);
with data do
begin
dwdata:=100;
lpdata:=msgtext;
cbdata:=length(msgtext);
end;sendmessage(strtoint(edit2.Text ),WM_COPYDATA,handle,integer(@data));
end;接收方定义:
procedure WMcopydata(var Msg:TMessage);message WM_COPYDATA;
接收方代码:
procedure TForm2.Button1Click(Sender: TObject);
begin
edit1.Text :=inttostr(handle);
end;procedure TForm2.WMcopydata(var Msg: TMessage);
var
data:copydatastruct;
s:string;
begin
data:=Pcopydatastruct(Msg.LParam)^;
with data do
begin
edit3.Text:=inttostr(dwdata);
s:=pchar(lpdata)+#0;
edit2.Text:=s;
end;
edit2.Text :=s;
end;问题:
第一次发送时收到的数据是正常的,但是从第二次开始,后面就有些附加的拉圾信息了,高手指点问题所在及解决方法.
var
Data:copydatastruct;
MsgText:pchar;
begin
msgtext:=#0;
MsgText:=pansichar(edit1.Text);
with data do
begin
dwdata:=100;
lpdata:=msgtext;
cbdata:=length(msgtext);
end;sendmessage(strtoint(edit2.Text ),WM_COPYDATA,handle,integer(@data));
end;接收方定义:
procedure WMcopydata(var Msg:TMessage);message WM_COPYDATA;
接收方代码:
procedure TForm2.Button1Click(Sender: TObject);
begin
edit1.Text :=inttostr(handle);
end;procedure TForm2.WMcopydata(var Msg: TMessage);
var
data:copydatastruct;
s:string;
begin
data:=Pcopydatastruct(Msg.LParam)^;
with data do
begin
edit3.Text:=inttostr(dwdata);
s:=pchar(lpdata)+#0;
edit2.Text:=s;
end;
edit2.Text :=s;
end;问题:
第一次发送时收到的数据是正常的,但是从第二次开始,后面就有些附加的拉圾信息了,高手指点问题所在及解决方法.
改为:
cbdata:=length(msgtext)*2
测试了一下,改成cbdata:=length(msgtext)+1就行了,也不会有乱码。
乱码应该由于长度不对的原因。
var
Data:copydatastruct;
MsgText:pchar;
S:string;
begin
S:=edit1.Text+#0;
MsgText:=pansichar(S);
with data do
begin
dwdata:=100;
lpdata:=msgtext;
cbdata:=length(S);
end;sendmessage(strtoint(edit2.Text ),WM_COPYDATA,handle,integer(@data));
end;其实原理同上是一样的,就是把cbdata加大了一点!
加了一是不是加了字符串的长度存储部份的一个byte?
不是太明白原理是什么,因为我传过去的内容没有少,只是后面多了一些无用的,少了1应是内容少些才对啊!