为什么 reinterpret_cast<int>(lParam);生成 C2440 错误?

Why does reinterpret_cast<int>(lParam); generate C2440 error?

我有一个典型的 Windows 带有签名的 C++/MFC/32-bit 消息处理程序 LRESULT CMyFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)

我写了这两行,比起第二行更喜欢第一行:

int iError = reinterpret_cast<int>(lParam);
int iWorks = (int)lParam;

我第一次遇到 C2440 错误: 错误 C2440:'reinterpret_cast':无法从 'LPARAM' 转换为 'int'

但是第二个编译正常

这是 C++,不是 C,因此我更喜欢第一个而不是第二个。我做错了什么?

reinterpret_cast 验证它可以在编译时重新解释底层位结构,并且它看到您正在尝试将 LPARAM 更改为 int 并且没有'不喜欢

试试 static_cast

更多信息:LPARAMdefined as LONG_PTR 本身是:

#if defined(_WIN64)
 typedef __int64 LONG_PTR; 
#else
 typedef long LONG_PTR;
#endif