【问题标题】:Is there a convention for Win32 message parameters use?Win32 消息参数的使用是否有约定?
【发布时间】:2020-04-09 15:11:50
【问题描述】:

我读到每条消息都有自己使用 lparam 和 wparam 的方式。我找不到任何关于何时传递指针的约定,谁负责内存处理。调用者应该跟踪还是消息处理程序应该处理它?我感觉到在消息传递模型中调用者很难管理内存。因为它不知道消息处理程序何时不再需要该资源。另一方面,这在 C++ 编程中被称为不好的做法。你能帮我解决这个问题吗?

【问题讨论】:

  • 视情况而定。如果消息是异步传递的,那么调用者必须承担责任。否则,就必须做出选择。没有一种尺寸适合所有解决方案。您需要先定义用途,然后再做出决定。
  • 如果您正在尝试解决特定问题,请告诉我们这是什么问题。如果您只是好奇,那么What do the letters W and L stand for in WPARAM and LPARAM? 可能适合您。
  • 我正在考虑我的应用程序的设计。我想选择正确的方式来实现消息传递。
  • 这是你的应用程序。你可以制定规则。如果您想转移资源的所有权/责任,那么没有什么能阻止您。
  • 如果您需要指针,那么 lParam 通常是一个,因为它曾经是“长”类型。当被调用者必须写入 lParam(由调用者提供)和 WM_NOTIFY 时,您可以使用 WM_GETTEXT 或 WM_GETMINMAXINFO 作为示例,当被调用者从调用者读取(并且不释放)时。通常,会针对具体情况添加详细信息,例如:WM_COPYDATA。这是用于 SendMessage 调用的。对于 PostMessage 调用,这是另一个故事。一些 APIS 使用包装器方法以不透明的方式处理所有这些:docs.microsoft.com/en-us/windows/win32/wintouch/… 并警告您。

标签: pointers winapi memory-management message-queue


【解决方案1】:

我的结论是,如何管理消息参数完全由代码设计师决定。我还注意到,如果以 aysnc 方式发布消息,则资源应该由消息处理程序释放,或者消息处理程序必须以某种方式通知发送方,不再需要在 lparam 或 wparam 中传递的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2014-03-17
    • 2011-12-12
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多