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

 更新时间:2013年04月11日 16:34:39   作者:  
C#应用程序是AnyCPU的,在一段处理鼠标滚轮WM_MOUSEWHEEL的代码里碰到溢出的问题OverflowException

在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;

测试通过。

相关文章

  • WPF PasswordBox进行数据绑定方法

    WPF PasswordBox进行数据绑定方法

    有的时候会遇见PasswordBox的Password属性不是依赖属性,因此无法进行数据绑定。本文介绍如何通过添加附加属性解决该问题,有此问题的同学可以参考下本文
    2021-06-06
  • C#操作Byte数组和十六进制进行互转

    C#操作Byte数组和十六进制进行互转

    这篇文章介绍了C#操作Byte数组和十六进制进行互转的的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#中的try catch finally用法分析

    C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • Unity UGUI实现滑动翻页效果

    Unity UGUI实现滑动翻页效果

    这篇文章主要为大家详细介绍了Unity UGUI实现滑动翻页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#画笔Pen画虚线的方法

    C#画笔Pen画虚线的方法

    这篇文章主要介绍了C#画笔Pen画虚线的方法,涉及C#画笔Pen属性的相关设置技巧,需要的朋友可以参考下
    2015-06-06
  • 初步认识C#中的Lambda表达式和匿名方法

    初步认识C#中的Lambda表达式和匿名方法

    这篇文章主要介绍了初步认识C#中的Lambda表达式和匿名方法,本文着重讲解Lambda表达式和匿名方法的基础知识,需要的朋友可以参考下
    2015-01-01
  • 详解C#如何实现读写ini文件

    详解C#如何实现读写ini文件

    .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置。本文将介绍C#读写ini文件的方法,需要的可以参考一下
    2022-01-01
  • C#控制IE进程关闭和缓存清理的实现代码

    C#控制IE进程关闭和缓存清理的实现代码

    这篇文章主要介绍了C#控制IE进程关闭和缓存清理的实现代码,需要的朋友可以参考下
    2014-04-04
  • Winform应用程序如何使用自定义的鼠标图片

    Winform应用程序如何使用自定义的鼠标图片

    这篇文章主要介绍了Winform应用程序如何使用自定义的鼠标图片,在window系统中,自带的鼠标外观可能看起来比较小,因此我们需要使用自己的鼠标图片外观
    2020-11-11
  • C#中List<T>存放元素的工作机制

    C#中List<T>存放元素的工作机制

    这篇文章介绍了C#中List<T>存放元素的工作机制,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论