我正在寻找一种将对象(vector<long>
在我的情况下)作为WPARAM
C++11 样式传递的方法。
我发现的教程使用 C 风格的强制转换或 areinterpret_cast
来传递指向对象的指针。这就要求消息的接收者在接收到对象后正确地处理它。
有没有办法使用 a 传递对象unique_ptr
?接收者可以完全拥有该对象。
如果您使用 Windows 消息传递指向对象的指针,那么您需要确保两件事:
如果您知道消息肯定会被处理,那么您可以在发送消息时调用.release()
源unique_ptr
,然后在另一个处理程序中取得所有权unique_ptr
。
问题在于如果未处理消息,请确保将其清理干净。这很棘手,因为通常没有一种干净的方法来检查,除非您使用SendMessage
(not PostMessage
) 并使用返回值来传达参数已被声明。
没有这样的方法。WPARAM 在标头中定义为 UINT_PTR。它只是一个大到足以在所有体系结构中接受指针的数字。您可以使用它传递指针的原因是指针本身实际上只是数字。
您可以执行以下技巧:分配一个shared_ptr<>
on heap (!),将指针作为 WPARAM 传递给它,复制shared_ptr<>
on receive 并删除您作为WPARAM
.