procedure TForm2.Button1Click(Sender: TObject);
var
  g:pmymsg;begin
  getmem(g,sizeof(mymsg));
  g.str:='kdjfksjkfad';
  postmessage(form1.Handle,mymessage,integer(g),0);
end;
//把一指针作为消息参数传给form1,procedure Tform1.domessage(var tt:Tmessage);{message mymessage;}
var
  gg:pmymsg;
begin
  gg:=pmymsg(tt.WParam);
  memo1.Lines.Add(gg^.str);
  freemem(gg,sizeof(mymsg));
  freemem(unit2.g,sizeof(mymsg));
end;
//form1中响应 mymessage,并取出指针地址,最后fremem ,这里的freemem会不会把 form2的G也释放掉?还有,当我点击第一次buttonclick后,第二次就会出错,怎么回事?谢谢了

解决方案 »

  1.   

    form1中的这句freemem(unit2.g,sizeof(mymsg));应放到form2中postmessage后,在消息发完后就释放
      

  2.   

    procedure Tform1.domessage(var tt:Tmessage);{message mymessage;}
    var
      gg:pmymsg;
    begin
      gg:=pmymsg(tt.WParam);
      memo1.Lines.Add(gg^.str);
      freemem(gg,sizeof(mymsg));
    //  freemem(unit2.g,sizeof(mymsg)); 不要
    end;
      

  3.   

    procedure TForm2.Button1Click(Sender: TObject);
    var
      g:pmymsg;这个g不是在 Button1Click 里声明的吗,那你在Tform1.domessage这里释放当然不对了
      

  4.   

    你们也可以试一下呀,现在不是说用不得,而是按第二次button后会提示出错,可能是因为释放了G这个指针的原因