为什么 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
。
更多信息:LPARAM
是 defined as LONG_PTR
本身是:
#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif
我有一个典型的 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
。
更多信息:LPARAM
是 defined as LONG_PTR
本身是:
#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif