Confusion of WPARAM with UINT, and LPARAM with LONG

23.01.2012

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.