gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:46 26 4
gpt4 key购买 nike

如何创建将任何数据传递给不同程序的自定义 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com