续:关于消息的困惑(100分)

  • 主题发起人 主题发起人 W1979
  • 开始时间 开始时间
W

W1979

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题和
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=223477
是相同的,这样这个问题实际是160分.

这个程序是form2向form1用消息传字符串,奇怪的是只能传4个字符,
请大家邦我看看

form2发送:
var pp:pchar;
buffer:pointer;
ss:string;
ii:integer;
begin
ii:=length(form2.edit1.text);
ss:=form2.Edit1.Text;
pp:=pchar(ss);
buffer:=pointer(localalloc(LPTR,sizeof(pp)+1));
move(pp^,buffer^,sizeof(pp));
postmessage(form1.handle,wm_mymsg,wparam(ii),lparam(buffer));

form1接收:
k:=pchar(msg.lparam);
j:=dword(msg.WParam);
form1.Edit1.Text:=inttostr(j);
form1.Edit2.Text:=k;

如果说的不够清楚,请留下地址我把程序发过去
 
给我发来,帮你看下。
 
wrench@263.net
 
cocia@sina.com
 
to cocia,fudei and rench:
多谢,程序已发.
 
move(pp^,buffer^,Length(ss));
 
W1979: 已发出,请查收。
修改后的代码可以传递超过4个字符的字串。
 
最好能给个结果评析,也好让外人共同探讨!
 
to Fudei:
程序收到,多谢了

对于move(),我一直认为传的是字节,所以都用sizeof(), 为什么用length()
呢,一个是字节数,一个是字符数
 
字符串是一个指针,你用 sizeof 得到的是指针的大小,4 字节
而用Length 就得到的是 pascal 字符串的长度。
 
又来晚了!
 
同意SuperMMX.
用MOVE时最后一个参数是字串的长度Length,
而不是字串变量本身在内存暂用的空间Sizeof.
 
多人接受答案了。
 
后退
顶部