たしか、関数を呼ぶときの引数って
途中でいじってはいけないというか、
どんなコードを吐かれも文句を
いえないことになっているよね?
こんなの。
  f(x, ++x);

それでは、キャストはどうなの?
  g(lparam, reinterpret_cast<HWND>(lparam));
こういうのは?