当前位置: 移动技术网 > IT编程>开发语言>c# > 解决C# X64应用程序中读取WParam溢出的问题

解决C# X64应用程序中读取WParam溢出的问题

2019年07月18日  | 移动技术网IT编程  | 我要评论
在x86的环境下, var wparam = (int)msg.wparam; 工作得很好。 在x64的环境下, 快速滚动滚轮会出现msg.wparam 转换为in

在x86的环境下,

var wparam = (int)msg.wparam;

工作得很好。

在x64的环境下,

快速滚动滚轮会出现msg.wparam 转换为int的时候溢出,(wparam=4263510016)。

信息为:

未处理system.overflowexception
  message=算术运算导致溢出。
  source=mscorlib
  stacktrace:
       在 system.intptr.op_explicit(intptr value)
       在 tim.mousewheelhandler.mousewheelmessagefilter.prefiltermessage(message& m) 位置。。。

查证wparam是intptr,msdn说

intptr 类型被设计成整数,其大小适用于特定平台。即是说,此类型的实例在 32 位硬件和操作系统中将是 32 位,在 64 位硬件和操作系统上将是 64 位。

所以,上面的代码应该为:

var wparam = (intptr.size == 8) ? (int)((long)msg.wparam << 32 >> 32) : (int)msg.wparam;

测试通过。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网