码迷,mamicode.com
首页 > 其他好文 > 详细

消息发送字符串

时间:2016-03-03 01:38:46      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

其实不论什么方法,归根揭底都是通过传递对象的指针来达到效果的。

方法一:

procedure SendString(strMSG: string);
var
  Data: tagCOPYDATASTRUCT;
  pBuf: PChar;
begin
  GetMem(pBuf, Length(strMSG) + 1);

  try
    ZeroMemory(pBuf, Length(strMSG) + 1);
    StrPCopy(pBuf, strMSG);

    Data.cbData:= Length(strMSG);
    Data.dwData:= Length(strMSG);
    Data.lpData:= pBuf;

    SendMessage(hTargetWin, WM_COPYDATA, Integer(Self.Handle), Integer(@Data));
  finally
    FreeMem(pBuf);
  end;
end;

procedure WMCopyData(var MSG: TMessage); message WM_COPYDATA;

procedure TForm1.WMCopyData(var MSG: TMessage);
var
  Data  : ^tagCOPYDATASTRUCT;
  strMSG: string;
begin
  Data:= Pointer(Msg.lParam);

  strMSG:= StrPas(Data.lpData);

  ShowMessage(strMSG);
end;

 

方法二:

TMyRecord=record  s:string;  end;   

 

tt:TMyRecord;

 

var  tt:TMyRecord;  begin  tt.s:=‘s2343243‘;   PostMessage(handle,WM_My,integer(tt),5); end; 
发送消息,由于参数只能是一个integer,你这样发只能发4个字节,所以要改成发指针,比如:
var tt:TMyRecord; begin  tt.s:=‘s2343243‘;   PostMessage(handle,WM_My,integer(@tt),5); end; 
接收的时候当然也不能用原来的方法:My:=TMyRecord(msg.WParam);这样取回来了,也要把TMyRecord声明成指针:

type  PMyRecord=^TMyRecord; var  My:PMyRecord; my:=PMyRecord(msg.WParam);

http://www.cnblogs.com/hnxxcxg/archive/2012/03/03/2378023.html

消息发送字符串

标签:

原文地址:http://www.cnblogs.com/findumars/p/5236967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!