什么是Win32消息编组?
What is Win32 message marshalling?
如果我阅读PostMessage API的描述,它有这样一句话:
系统只对系统消息进行封送处理范围0到(WM_USER-1))发送其他消息(那些>= WM_USER)到另一个进程,您必须执行自定义封送。
我很好奇什么是"消息编组"?
消息有时在其参数中传递指向内存缓冲区的指针。如果你将一个内存地址按原样从一个进程发送给另一个进程,该地址在接收进程中将不具有相同的含义。
对于系统消息,例如WM_SETTEXT
和WM_COPYDATA
,操作系统知道如何处理这些消息的内存缓冲区。当跨进程发送这样的消息时,操作系统自动在接收进程中分配一个适当的内存缓冲区,并用原始数据的副本填充它。然后,在将消息传递给目标消息处理程序之前,将消息参数相应地调整为指向新的内存地址。
对于包含指针的自定义消息,操作系统不能自动为您封送数据,因此您必须执行自己的自定义封送。
这就是消息封送处理的作用。以安全的方式将外部引用的数据从一个进程复制到另一个进程,以便消息中的任何指针在接收进程的地址空间内都有意义。
考虑一件使IPC变得复杂的独立Win32进程的根本不同之处…它们的地址空间
封送通常指的是打包数据以便跨主机/进程通信。在这种情况下,Windows处理消息中它知道的任何指针,以便它们在接收进程的地址空间中是有效的指针。换句话说,如果一个消息在发送过程中指向某个东西,Windows确保它指向的东西被复制,并且在它被接收后,消息被修改,以便它指向内存在新地址空间中被复制的位置。
Windows不能做任何事情,甚至远程像用户消息,因为它不知道如何解释它的任何,因此它成为你的责任编组数据的任何消息>= WM_USER
- 消息框在WM_COMMAND内不起作用!(WIN32 API)
- 带有 win32 低级别消息 API 的 CAdES 签名
- Win32 消息队列在使用 OpenGL 渲染时被淹没
- OpenGL 的 Win32 主消息循环
- 注册以在 MFC 中发出 Win32 事件信号时接收 Windows 消息
- 使用 Win32 API 禁用消息框中右上角C++ X 按钮图标?
- Win32 中是否有一条消息或通知来检测用户何时更改区域设置?
- 如何使用C Win32 API中的消息框文本中的值
- win32消息泵,do dispatchMessage()处理整个消息队列或仅仅是顶部消息
- Win32 工具栏下拉按钮消息处理
- Win32 消息循环 - 我应该中断还是返回
- C++/Win32 最小的可能的消息框("Hello")应用程序exe?
- C++ Win32 通过电子邮件或 Web 浏览器发送消息
- 如何在 Win32 API 的对话框中显示自定义消息
- 使用发送消息设置文本框文本 设置文本仅发送字符串 win32 c++ 的第一个字符
- 在窗口标题和消息框中显示错误的语言:win32应用程序,opengl
- 是否可以创建无法通过枚举找到的 win32 消息传递窗口?
- Win32中缺少鼠标移动消息
- 重复消息在鼠标进程c++ Win32
- 启用win32消息框中的关闭按钮