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的主要内容,如果未能解决你的问题,请参考以下文章

PostMessage和SendMessage的区别

vb中 sendmessage WM_char这个API函数 结果无限发

linux系统装32位的还是64位的?

32位和64位的区别

电脑32位和64位有啥区别 电脑32位和64位的区别

如何查看Linux的系统是64位的还是32位的