Confusion of WPARAM with UINT, and LPARAM with LONG

Andrey Karpov
Articles: 565

A great deal of compilation errors occurring when trying to recompile a 32-bit Windows application for 64-bit systems is related to inccorect function arguments. You may often see that in user code UINT and LONG types are used instead of WPARAM and LPARAM as function arguments.

Here is an example:

//Function definition in the class
virtual LRESULT OnTrayNotification(WPARAM uID, LPARAM lEvent);
//Function implementation
LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam)

In Win32 the type WPARAM coincides with UINT and LPARAM coincides with LONG. In Win64 these are different types, so you must correct the code. See also the post "A common error occurring when compiling a 64-bit application: error C2440, OnTimer" on this topic.

Use PVS-Studio to search for bugs in C, C++, C# and Java

We offer you to check your project code with PVS-Studio. Just one bug found in the project will show you the benefits of the static code analysis methodology better than a dozen of the articles.

goto PVS-Studio;

Andrey Karpov
Articles: 565

Bugs Found

Checked Projects
Collected Errors
14 526
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →