2

我正在寻找一种将对象(vector<long>在我的情况下)作为WPARAMC++11 样式传递的方法。

我发现的教程使用 C 风格的强制转换或 areinterpret_cast来传递指向对象的指针。这就要求消息的接收者在接收到对象后正确地处理它。

有没有办法使用 a 传递对象unique_ptr?接收者可以完全拥有该对象。

4

3 回答 3

3

如果您使用 Windows 消息传递指向对象的指针,那么您需要确保两件事:

  1. 在消息被处理之前源不会销毁对象
  2. 如有必要,目的地正确销毁对象

如果您知道消息肯定会被处理,那么您可以在发送消息时调用.release()unique_ptr,然后在另一个处理程序中取得所有权unique_ptr

问题在于如果未处理消息,请确保将其清理干净。这很棘手,因为通常没有一种干净的方法来检查,除非您使用SendMessage(not PostMessage) 并使用返回值来传达参数已被声明。

于 2012-07-02T09:28:06.873 回答
1

没有这样的方法。WPARAM 在标头中定义为 UINT_PTR。它只是一个大到足以在所有体系结构中接受指针的数字。您可以使用它传递指针的原因是指针本身实际上只是数字。

于 2012-07-02T09:24:14.797 回答
1

您可以执行以下技巧:分配一个shared_ptr<> on heap (!),将指针作为 WPARAM 传递给它,复制shared_ptr<>on receive 并删除您作为WPARAM.

于 2012-07-02T09:26:33.937 回答