Вы приводите 32-битный UINT к 64-битному указателю.Это самоубийство - вы пытаетесь указать на что-то, но наполовину забыли это место!Вы абсолютно ДОЛЖНЫ взять UINT_PTR.Когда вы приводите указатель на int, поведение будет нормальным, только если int имеет тот же размер, что и указатель.Иначе, это конец времени выполнения вашего приложения благодаря нарушению прав доступа.
Редактировать:
Почему компилятор считает плохой идеей приводить к большему типу?
RE выше
Какой лучший способ избавиться от предупреждения?(Я не хочу его отключать.)
Исправить проблему.Этот код почти наверняка будет вызывать сбои.
Выполнение двойного приведения типа, подобного этому: (HMENU) (UINT_PTR) id избавляет от предупреждения.Почему / как?
Это происходит потому, что приведение UINT к UINT_PTR совершенно корректно - UINT_PTR - просто целочисленный тип, без потери данных.
Отключение «Обнаружение 64-битных проблем переносимости» (Wp64) также избавляется от предупреждения.Почему Wp64 не рекомендуется?Должен ли я его включить?
Это устарело, потому что, на самом деле, я не могу вспомнить почему.Я думаю, что это предупреждает слишком легко.Но для базового «Не приводите целочисленные типы и указатели» вы должны обязательно оставить его включенным.