发送方代码: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;问题:
 第一次发送时收到的数据是正常的,但是从第二次开始,后面就有些附加的拉圾信息了,高手指点问题所在及解决方法.

解决方案 »

  1.   

    应该是你在字符串处理上面有问题,为什么要在string后面加上#0,这个Delphi会自动加上。
      

  2.   

    把cbdata:=length(msgtext);
    改为:
    cbdata:=length(msgtext)*2
      

  3.   


    测试了一下,改成cbdata:=length(msgtext)+1就行了,也不会有乱码。
    乱码应该由于长度不对的原因。
      

  4.   

    还有一种方法,也可以消除乱码,代码如下:procedure TForm2.Button1Click(Sender: TObject);
    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加大了一点!
      

  5.   


    加了一是不是加了字符串的长度存储部份的一个byte?
    不是太明白原理是什么,因为我传过去的内容没有少,只是后面多了一些无用的,少了1应是内容少些才对啊!