PostMessage發送後, 接收到的字符串不完整?该怎么解决

PostMessage發送後, 接收到的字符串不完整?
各位好!   我用PostMessage函數發送字符串,   但不能完整接收所發送的內容.   而用SendMessage函數確可以準確接收.   請問這是為什麼呢?  


unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   StdCtrls;

const
    WM_PostMsg   =   WM_User   +   300;
    WM_SendMsg   =   WM_User   +   301;
   
type
    TForm1   =   class(TForm)
        Memo1:   TMemo;
        Button1:   TButton;
        Button2:   TButton;
        Edit1:   TEdit;
        procedure   Button1Click(Sender:   TObject);
        procedure   Button2Click(Sender:   TObject);
    private
        {   Private   declarations   }
        procedure   WMPostMsg(var   Msg:   TMessage);   message   WM_PostMsg;
        procedure   WMSendMsg(var   Msg:   TMessage);   message   WM_SendMsg;
    public
        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation

{$R   *.dfm}

procedure   TForm1.Button1Click(Sender:   TObject);
var
    s:   string;
begin
    s   :=   Edit1.Text;
    PostMessage(Form1.Handle,   WM_PostMsg,   0,   Integer(s));
end;

procedure   TForm1.Button2Click(Sender:   TObject);
var
    s:   string;
begin
    s   :=   Edit1.Text;
    SendMessage(Form1.Handle,   WM_PostMsg,   0,   Integer(PChar(s)));
end;

//PostMessage方法發送的不能完整接收?
procedure   TForm1.WMPostMsg(var   Msg:   TMessage);
var
    p:   PChar;
begin
    p   :=   PChar(Msg.LParam);
    Memo1.Lines.Add( 'Post:   '   +   p);
end;

//SendMessage方法發送的可以正常接收
procedure   TForm1.WMSendMsg(var   Msg:   TMessage);
var
    p:   pchar;
begin
    p   :=   PChar(Msg.LParam);
    Memo1.Lines.Add( 'Send:   '   +   p);
end;

end.

------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s := Edit1.Text + #0;
PostMessage(Form1.Handle, WM_PostMsg, 0, Integer(s));
end;
------解决方案--------------------
procedure TForm1.Button2Click(Sender: TObject);
var
s: string; < < <--- 不要使用局部变量。因为Post不是立即响应,等到接受的时候,局部变量的内存已经被释放。指针所指的地址无效了。
begin
s := Edit1.Text;
SendMessage(Form1.Handle, WM_PostMsg, 0, Integer(PChar(s)));
end;