Путаница с WPARAM и UINT, а также LPARAM с LONG


При попытке перекомпиляции 32-битного Windows приложения для 64-битной системы, большое количество ошибок компиляции связано с некорректными аргументами функций. Часто можно встретить ситуацию, когда в качестве аргументов функции в пользовательском коде используются типы UINT и LONG вместо WPARAM и LPARAM. Пример:

//Объявление функции в классе
virtual LRESULT OnTrayNotification(WPARAM uID, LPARAM lEvent);
//Реализация функции
LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam)

В Win32 тип WPARAM совпадает с UINT, а LPARAM с LONG. В Win64 это разные типы и код необходимо скорректировать. Смотрите по этой теме также запись "Распространенная ошибка при компиляции 64-битного приложения: error C2440, OnTimer".



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;



Найденные ошибки

Проверено проектов
346
Собрано ошибок
13 188

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;