Они несколько одинаковы.LRESULT
предназначен для типа возвращаемого значения, который может содержать что-то, по крайней мере, размер указателя на данной платформе.
От Типы данных Windows (Windows)
LRESULT :
Подписанный результат обработки сообщения.
Этот тип объявлен в WinDef.h следующим образом:
typedef LONG_PTR LRESULT;
LONG_PTR :
Длинный тип со знаком для точности указателя.Используется при приведении указателя на long для выполнения арифметики указателя.
Этот тип объявлен вследующим образом:
#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif
Тип LRESULT
претерпел ряд изменений за последние годы.Я считаю, что до Win64 он был определен как INT_PTR
, но затем обновлен для переносимости под Win64.Ряд других типов претерпел аналогичные изменения, такие как WPARAM
и LPARAM
, которые раньше были 16-битными значениями в Win16, 32-битными значениями в Win32 и теперь 64-битными в Win64.
Фактическое возвращаемое значение варьируется в зависимости от контекста сообщения Windows, как указывает @ildjarn.Существует также вероятность того, что исходный код, который вы читаете, был, вероятно, создан до того, как Win64 стала большой проблемой, и, возможно, его не обновляли и не проверяли на переносимость с момента его написания.
Для переносимости определены символынемного по-разному в зависимости от цели компиляции.Следовательно, (INT_PTR)TRUE
лучше, даже если вы знаете точное значение, которое должно быть возвращено и которое соответствует вашей сборке.Хотя return 0;
может возвращать правильный результат в случаях, когда возвращаемое значение пусто, это плохая форма при компиляции в сценариях, где переносимость имеет значение.Использование return -1;
или даже return 0x7FFFFFFF;
еще хуже, поскольку вы можете обрезать, маскировать или иным образом искажать ответ, который должен быть дан для всех целей компиляции платформы.
Лучше всего использовать предопределенные символы и константы,правильные значения и типы будут подставлены вместо вас при изменении целей компиляции.