64 位的 SendMessage API
Posted
技术标签:
【中文标题】64 位的 SendMessage API【英文标题】:SendMessage API in 64 bit 【发布时间】:2008-11-12 08:15:32 【问题描述】:根据 MSDN
返回值指定结果 消息处理;这取决于 在发送的消息上。
我知道它被定义为
typedef LONG_PTR LRESULT;
意味着它在 64 位机器上是 8 个字节,但不是!
有谁知道假设只使用低 4 个字节并将其存储为INT
(例如)是否安全。
【问题讨论】:
【参考方案1】:不,这不安全,因为返回值是由正在发送的消息和处理程序定义的。
如果您控制处理程序和消息,那么它是可能的,在一般情况下它是不安全的。
詹姆斯
【讨论】:
【参考方案2】:不,一般来说它是不安全的。不要假设沮丧。此外,使用 /RTCc 编译代码也很有用,可确保在运行时断言无意的强制转换。
【讨论】:
【参考方案3】:绝对不安全。如果消息返回确实是一个指针,那么指针很有可能设置它的第 33 位 - 尤其是在具有 >4GB 内存的机器上。
【讨论】:
由于内存虚拟化,小于 4GB 也可能发生这种情况。以上是关于64 位的 SendMessage API的主要内容,如果未能解决你的问题,请参考以下文章