两个应用程序消息通信的问题
接收的程序
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
MSG_USERDEFINE = WM_COPYDATA + 20;
//MSG_USERDEFINE = WM_USER + 20;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ProcessMyMsg(var Msg: TMessage); message MSG_USERDEFINE;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ProcessMyMsg(var Msg: TMessage);
var
CDS: ^tagCOPYDATASTRUCT;
begin
CDS := Pointer(Msg.lParam);
Memo1.Lines.Add(StrPas(CDS.lpData));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CDS: tagCOPYDATASTRUCT;
begin
CDS.cbData := Length(Edit2.Text)+1;
CDS.lpData := PChar(Edit2.Text);
PostMessage(handle, MSG_USERDEFINE, 0, integer(@CDS));
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Text :=IntToStr(handle);
end;
end.
***************************************
上面的程序自发自收没有问题
发送程序
unit Unit_Sen;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
MSG_USERDEFINE = WM_USER + 20;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
aaa:string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
CDS: tagCOPYDATASTRUCT;
begin
aaa := Memo1.Text;
CDS.dwData := Length(aaa)+1;
CDS.cbData := Length(aaa)+1;
CDS.lpData := PChar(aaa);
SendMessage(StrToInt(Edit1.Text), MSG_USERDEFINE, handle, integer(@CDS));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
strMSG: string;
Data: tagCOPYDATASTRUCT;
pBuf: PChar;
begin
strMSG := Memo1.Text;
GetMem(pBuf, Length(strMSG) + 1);
try
ZeroMemory(pBuf, Length(strMSG) + 1);
StrPCopy(pBuf, strMSG);
Data.dwData:= Length(strMSG);
Data.cbData:= Length(strMSG);
Data.lpData:= pBuf;
SendMessage(StrToInt(Edit1.Text), MSG_USERDEFINE, handle, Integer(@Data));
finally
FreeMem(pBuf);
end;
end;
end.
****************************
2种发送 发送时接收程序提示错误或者接收到的内容是错误的,是不是内存访问有限制?我要实现两个应用程序间消息的通信应如何做,谢谢
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
MSG_USERDEFINE = WM_COPYDATA + 20;
//MSG_USERDEFINE = WM_USER + 20;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ProcessMyMsg(var Msg: TMessage); message MSG_USERDEFINE;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ProcessMyMsg(var Msg: TMessage);
var
CDS: ^tagCOPYDATASTRUCT;
begin
CDS := Pointer(Msg.lParam);
Memo1.Lines.Add(StrPas(CDS.lpData));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CDS: tagCOPYDATASTRUCT;
begin
CDS.cbData := Length(Edit2.Text)+1;
CDS.lpData := PChar(Edit2.Text);
PostMessage(handle, MSG_USERDEFINE, 0, integer(@CDS));
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Text :=IntToStr(handle);
end;
end.
***************************************
上面的程序自发自收没有问题
发送程序
unit Unit_Sen;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
MSG_USERDEFINE = WM_USER + 20;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
aaa:string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
CDS: tagCOPYDATASTRUCT;
begin
aaa := Memo1.Text;
CDS.dwData := Length(aaa)+1;
CDS.cbData := Length(aaa)+1;
CDS.lpData := PChar(aaa);
SendMessage(StrToInt(Edit1.Text), MSG_USERDEFINE, handle, integer(@CDS));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
strMSG: string;
Data: tagCOPYDATASTRUCT;
pBuf: PChar;
begin
strMSG := Memo1.Text;
GetMem(pBuf, Length(strMSG) + 1);
try
ZeroMemory(pBuf, Length(strMSG) + 1);
StrPCopy(pBuf, strMSG);
Data.dwData:= Length(strMSG);
Data.cbData:= Length(strMSG);
Data.lpData:= pBuf;
SendMessage(StrToInt(Edit1.Text), MSG_USERDEFINE, handle, Integer(@Data));
finally
FreeMem(pBuf);
end;
end;
end.
****************************
2种发送 发送时接收程序提示错误或者接收到的内容是错误的,是不是内存访问有限制?我要实现两个应用程序间消息的通信应如何做,谢谢
...全文
相关推荐
基于MFC的Windows下多进程消息通信技术及应用.pdf
总之,基于MFC的Windows下多进程消息通信技术提供了灵活且实用的解决方案,它通过命令消息、标准消息和控件通知,结合钩子和转发机制,使得进程间的数据交换和控制指令得以实现,是Windows应用程序开发中的重要技术之一
Java消息通信研究.pdf
JMS是Java消息服务的简称,它是一种消息中间件,主要用于两个应用程序间或分布式系统间发送消息,进行异步消息通信。
易语言WM_COPYDATA消息通信源码
在易语言中,WM_COPYDATA消息通信是一个重要的技术概念,它允许不同进程间的通信(IPC,Inter-Process Communication),使得应用程序可以交换数据而无需直接交互。
ZeroMQ 云时代极速消息通信库 PDF电子书下载 带书签目录 完整版
**实战案例**:通过实际的代码示例和项目案例,加深对ZeroMQ理解和应用,提升解决实际问题的能力。
基于Akka的加密消息通信.rar_scala akka_基于Akka通信框架的加密通信项目_消息通信
**基于Akka的加密消息通信**Akka是一个用于构建高度并发、分布式和容错的应用程序的开源工具包,它基于actor模型,运行在Java虚拟机(JVM)上。


