C++ 如何在mfc和x2B中创建自定义wm#U copydata+;

C++ 如何在mfc和x2B中创建自定义wm#U copydata+;,c++,windows,marshalling,messaging,C++,Windows,Marshalling,Messaging,如何创建自定义windows消息,将任何数据传递到其他程序 我正在GUI程序和服务器程序之间传递消息。我的背景是*nix编程,我对windows世界有点迷茫 目前,这两个程序都是由VisualStudio的向导通过选择“MFC窗口应用程序”创建的。现在我想要一种优雅的方式在程序之间进行交流。Google给了我Cwnd->sendmessage+注册你自己的消息等。但是,我不能用标准的自定义消息将一个字符指针传递给另一个程序(当然,我可以,但内存区域是错误的,程序会出错)。所以,谷歌再次给我发送消

如何创建自定义windows消息,将任何数据传递到其他程序

我正在GUI程序和服务器程序之间传递消息。我的背景是*nix编程,我对windows世界有点迷茫

目前,这两个程序都是由VisualStudio的向导通过选择“MFC窗口应用程序”创建的。现在我想要一种优雅的方式在程序之间进行交流。Google给了我Cwnd->sendmessage+注册你自己的消息等。但是,我不能用标准的自定义消息将一个字符指针传递给另一个程序(当然,我可以,但内存区域是错误的,程序会出错)。所以,谷歌再次给我发送消息(WM_COPYDATA,hparam,lparam),这是封送的。当谷歌搜索编组时。。。我撞到了一堵墙

我假设封送的消息(或它们的数据)被传递到共享内存区域,该区域仅由发送方和接收方程序可读(正确吗?)。通过创建一个自定义消息,其中包含一个作为LPRAM的编组数据指针,我可以将任何对象传递给另一个程序(正确吗?)。我在实践中如何做到这一点?我尝试了以下方法:

pWin->SendMessage(pTargetWin, WM_CUSTOM_MESSAGE, pSourceWin, pData);
如果pData为整数,则上述操作有效。如果pData是指向对象的指针,我就不能使用该对象,因为缺少marhsalling。我知道我可以对pData进行包装COPYDATASTRUCT包装并更改为WM_COPYDATA。我应该这样做吗

比尔, Juha为您进行编组,前提是您正确初始化了作为LPRAM传递的数据(lpData是指针,而不是dwData)。自定义消息无法做到这一点,您也不希望手动重新实现编组。如果需要编组,请使用WM_COPYDATA。这就是你要问的吗?听起来你已经知道答案了

如果需要支持多种不同类型的消息,可以在COPYDATASTRUCT.dwData中填充一个枚举,以指定其余数据的含义。如果四个字节不够,您可以在封送的数据上定义一个头

不管怎样,只要你能传递一大堆0和1,你就可以随心所欲地交流

为您进行编组,前提是您正确初始化了作为LPRAM传递的数据(lpData是指针,而不是dwData)。自定义消息无法做到这一点,您也不希望手动重新实现编组。如果需要编组,请使用WM_COPYDATA。这就是你要问的吗?听起来你已经知道答案了

如果需要支持多种不同类型的消息,可以在COPYDATASTRUCT.dwData中填充一个枚举,以指定其余数据的含义。如果四个字节不够,您可以在封送的数据上定义一个头


不管怎样,只要你能传递一大堆0和1,你就可以随心所欲地交流

嗯,我想做的是手工编组。。。另一个选择是如您所说使用WM_COPYDATA。我想知道的另一件事是封送数据的可见性(在WM_COPYDATA的情况下)。它对所有程序都可见还是仅对这两个程序可见?为什么要手动进行编组?至于能见度,那东西没有安全措施。Spy++可以钩住任何人的消息循环并查看其中的任何内容。好。。。实际上,这是针对属于同一用户的两个进程。我怀疑您是否可以查看属于不同用户帐户的消息队列。但是,对于跨站点脚本编写来说,前者就足够了。这是我正在开发的大型多平台、多操作系统软件的最后一段代码。我对windows编程不太熟悉,我只是在探索其中的矛盾:“你可以使用wm_copydata生成各种wm_消息”。无论如何,正确的做法似乎是使用wm_copydata并将内容包装到copydatastruct中。我要包装的是一个命令模式对象。请参阅:谢谢您的帮助。啊,我明白了:窗口消息是操作系统如何告诉您有关用户输入的信息,以及您如何在进程中与子窗口对话。在Win32中(以及在MFC甚至Windows窗体中的后台),如果要向列表框添加项目,则向其发送消息(LB_ADDSTRING)。如果需要列表框中的项目计数,可以向其发送另一条消息(LB_GETCOUNT)。在Windows实现多任务处理之前的几年,“消息”这个词就被附加到了这个概念上。这个术语对一个没有全程陪伴的人来说无疑是一种误导。这不是一个IPC机制。嗯,我想做的是手工编组。。。另一个选择是如您所说使用WM_COPYDATA。我想知道的另一件事是封送数据的可见性(在WM_COPYDATA的情况下)。它对所有程序都可见还是仅对这两个程序可见?为什么要手动进行编组?至于能见度,那东西没有安全措施。Spy++可以钩住任何人的消息循环并查看其中的任何内容。好。。。实际上,这是针对属于同一用户的两个进程。我怀疑您是否可以查看属于不同用户帐户的消息队列。但是,对于跨站点脚本编写来说,前者就足够了。这是我正在开发的大型多平台、多操作系统软件的最后一段代码。我对windows编程不太熟悉,我只是在探索其中的矛盾:“你可以使用wm_copydata生成各种wm_消息”。无论如何,正确的做法似乎是使用wm_copydata并将内容包装到copydatastruct中。我要包装的是一个命令模式对象。请参阅:谢谢您的帮助。啊,我明白了:窗口消息是操作系统如何告诉您有关用户输入的信息,以及您如何在进程中与子窗口对话。在Win32中(以及在MFC甚至Windows窗体中的后台),如果要向列表框添加项目,则向其发送消息(LB_ADDSTRING)。如果您想要li中的项目计数