消息的困惑,看看也给分

wlq 2000-04-17 10:37:00
代码如下,form2发送消息,form1接收,奇怪的是发送字符串长度超过4
就收不到lparam参数


form2发送:
procedure TForm2.trans1Click(Sender: TObject);
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));
end;


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

只有发送的 长度<=4才是正常的
不知是为什么?

...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
易杰ERP 2000-04-19
  • 打赏
  • 举报
回复
看看也给分吗?
jll 2000-04-19
  • 打赏
  • 举报
回复
同意eaglet,pp指针的大小是4字节,pp和pp^是有区别的……
eaglet 2000-04-19
  • 打赏
  • 举报
回复
问题的关键在这里
buffer:=pointer(localalloc(LPTR,sizeof(pp)+1));
move(pp^,buffer^,sizeof(pp));
上面代码中pp是一个PChar类型的指针,size为4,所以
字符串长度小于等于4没有问题,大于4则后面的被截掉。
我把你的代码改了一下就可以发送大于4的字符串了。
代码如下,程序在Delphi3下调试通过

form2发送:
procedure TForm2.trans1Click(Sender: TObject);
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,length(edit1.text) +1));
move(pp^,buffer^,length(edit1.text));
postmessage(form1.handle,wm_user,wparam(ii),lparam(buffer));
end;
蝈蝈俊 2000-04-19
  • 打赏
  • 举报
回复
帮不上忙。
LittleStar 2000-04-19
  • 打赏
  • 举报
回复
可以看一下win32 SDk 中sendmessage的解释。
//发送
var
param:array[0..254]of char;
begin
Strpcopy(param,'MyString...');
SendMessage(ActiveMDIChild.Handle,wm_MaintoChild, 12, Longint(@param));
end;
//接收
var temp:String;
begin
case Msg.wParam of
12:begin
temp:=StrPas(pchar(msg.lParam));
end;
end;
thinking_man 2000-04-19
  • 打赏
  • 举报
回复
不清楚。

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧