Почему reinterpret_cast <int>(лПарам); генерировать ошибку C2440? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть типичный 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'

, но 2-й компилируется нормально

Это C ++, а не C, поэтому я предпочитаю первое, а не второе. Что я делаю не так?

1 Ответ

3 голосов
/ 09 марта 2020

reinterpret_cast подтверждает, что он может заново интерпретировать базовую битовую структуру во время компиляции, и видит, что вы пытаетесь изменить LPARAM на int, и вам это не нравится.

Попробуйте static_cast.

Дополнительная информация: LPARAM - это , определенное как LONG_PTR, которое само по себе:

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