【问题标题】:SendMessage API in 64 bit64 位的 SendMessage API
【发布时间】:2008-11-12 08:15:32
【问题描述】:

根据 MSDN

返回值指定结果 消息处理;这取决于 在发送的消息上。

我知道它被定义为

typedef LONG_PTR LRESULT;

意味着它在 64 位机器上是 8 个字节,但不是!

有谁知道假设只使用低 4 个字节并将其存储为INT(例如)是否安全。

【问题讨论】:

    标签: c++ c winapi


    【解决方案1】:

    不,这不安全,因为返回值是由正在发送的消息和处理程序定义的。

    如果您控制处理程序和消息,那么它是可能的,在一般情况下它是不安全的。

    詹姆斯

    【讨论】:

      【解决方案2】:

      不,一般来说它是不安全的。不要假设沮丧。此外,使用 /RTCc 编译代码也很有用,可确保在运行时断言无意的强制转换。

      【讨论】:

        【解决方案3】:

        绝对不安全。如果消息返回确实是一个指针,那么指针很有可能设置它的第 33 位 - 尤其是在具有 >4GB 内存的机器上。

        【讨论】:

        • 由于内存虚拟化,小于 4GB 也可能发生这种情况。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 2012-01-24
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2015-06-06
        相关资源
        最近更新 更多