c++ - 如何在 mfc C++ 中创建自定义 wm_copydata

标签 c++ windows marshalling messaging

如何创建将任何数据传递给不同程序的自定义 Windows 消息。

我在 GUI 程序和服务器程序之间进行消息传递。我的背景是 *nix 编程,但我有点迷失在 Windows 世界中。

目前这两个程序都是由 Visual Studio 的向导通过选择“MFC 窗口应用程序”创建的。现在我想要一种优雅的方式来在程序之间进行通信。 Google 给了我 Cwnd->sendmessage + 注册您自己的消息等。但是,我无法将 char 指针传递给具有标准自定义消息的不同程序(好吧,我可以,但内存区域错误,并且程序段错误)。所以,谷歌再次给我编码的 sendmessage(WM_COPYDATA, hparam, lparam) 。在谷歌搜索编码时......我遇到了一堵墙。

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

pWin->SendMessage(pTargetWin, WM_CUSTOM_MESSAGE, pSourceWin, pData);

如果 pData 是整数,上面的方法有效。如果 pData 是指向对象的指针,我将无法使用该对象,因为缺少编码。我知道我可以对 pData 做一个包装器 COPYDATASTRUCT 包装器并更改为 WM_COPYDATA。我应该这样做吗?

br, 巨哈

最佳答案

WM_COPYDATA为您编码,前提是您已正确初始化 COPYDATASTRUCT您作为 LPARAM 传递(lpData 是指针,而不是 dwData)。自定义消息不会那样做,并且您不想手动重新实现编码。如果您需要编码,请使用 WM_COPYDATA。那是你要问的吗?听起来您已经知道答案了。

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

不管怎样,只要你能传递一大堆零和一,你就可以交流任何你喜欢的东西。

关于c++ - 如何在 mfc C++ 中创建自定义 wm_copydata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236320/

相关文章:

c++ - Ubuntu C++ 可执行文件

C++ - 带有 std::string 的统一初始值设定项

c# - 有没有办法为 UserPrincipal.FindByIdentity() 启用推荐追踪?

Delphi 将我的对象编码为字符串泄漏,但为什么呢?

c# - C#中的StringBuilder编码问题

c++ - 如何设置 VS2008 以进行高效的 C++ 开发

c++ - 使用自由函数作为 LPOVELAPPED_COMPLETION_ROUTINE

windows - 使用 WinDbg 设置远程内核调试器

c# - Windows 10 是否具有 LowLevelHooksTimeout 的注册表项

windows - 有没有办法减少与进程外 COM 调用相关的开销?