Согласно MSDN
The return value specifies the result of the message processing; it depends on the message sent.
Я знаю, что это определяется как
typedef LONG_PTR LRESULT;
Это означает, что на 64-битной машине это будет 8 байт, но это не так!
Кто-нибудь знает, можно ли предположить, что используются только младшие 4 байта, и сохранить его как INT (например).





Нет, это небезопасно, потому что возвращаемое значение определяется отправляемым сообщением и обработчиком.
Если вы управляете обработчиком и сообщением, это возможно, но в общем случае это небезопасно.
Джеймс
Нет, в целом это небезопасно. Не думайте о подавленном. Также полезно скомпилировать ваш код с помощью / RTCc, который гарантирует, что непреднамеренное приведение выполняется во время выполнения.
Определенно небезопасно. Если возвращаемое сообщение действительно является указателем, вполне возможно, что для указателя будет установлен 33-й бит, особенно на машинах с памятью> 4 ГБ.
Это также может произойти с объемом менее 4 ГБ из-за виртуализации памяти.