两个程序间发送信息,为什么收不到其它信息啊!(50分)

  • 主题发起人 主题发起人 13708782004
  • 开始时间 开始时间
1

13708782004

Unregistered / Unconfirmed
GUEST, unregistred user!
发送方:
const wm_login = wm_user + 1000;
type
pmymsg = ^tmymsg;
tmymsg = record
msg: cardinal;
msgtext: shortstring;
end;
procedure TForm1.Button3Click(Sender: TObject);
var msg: tmymsg;
h: hwnd;
begin
msg.msg := wm_login;
msg.msgtext := 'USERID:516 PWD:123';
h := findwindow(0, 'Form1abc');
if h > 0 then
begin
memo1.Lines.Add('已经找到对方,并且已经发送消息');
SendMessage(h, wm_login, Integer(@msg), 0);
end;
end;
接收方:
const wm_login = wm_user + 1000;
pmymsg = ^tmymsg;
tmymsg = record
msg: cardinal;
msgtext: shortstring;
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private

public
procedure WndProc(var message: TMessage); override;
end;
procedure TForm1.WndProc(var message: TMessage);
var data:pmymsg;
begin
if message.Msg = wm_login then
begin
memo1.Lines.Add('aaaaaa');
data := pmymsg(message.wParam);
memo1.Lines.Add(data^.msgtext);
end;
inherited WndProc(message);
end;
//-------为什么,能收到指定消息,但msgtext 部分是空的,或则乱码啊!
 
试试把msg: tmymsg;放到这
..........
var
Form1:TForm1;
msg: tmymsg;
.........
 
没有改进!
 
没有人知道了吗?
 
晕,基础知识不牢固。两个进程在互相独立的线性内存中,A不可能读到B的内存,所以你接受端在接受的时候,实际上是读的自己的内存段,而那个位置根本没有你需要的数据。你需要用GlobalAlloc分配全局内存,存储后,把全局内存的指针发给接受端,接受段接受数据后负责释放GlobalAlloc分配的内存。不过,由于SendMessage发送消息并不能保证消息被接收,所以,这样可能造成内存泄漏。
 
to zqw0117 :
谢谢了,我回想起来了!你说的没错!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
639
import
I
I
回复
0
查看
818
import
I
I
回复
0
查看
2K
import
I
I
回复
0
查看
668
import
I
后退
顶部