解决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;

测试通过。

相关文章

  • C#实现装箱与拆箱操作简单实例

    C#实现装箱与拆箱操作简单实例

    这篇文章主要介绍了C#实现装箱与拆箱操作,对于新手理解装箱与拆箱有一定的帮助,需要的朋友可以参考下
    2014-07-07
  • C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)

    C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)

    这篇文章主要介绍了C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • C#中的DataTable查询实战教程

    C#中的DataTable查询实战教程

    这篇文章主要介绍了C#中的DataTable查询实战教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C#使用NPOI操作Excel工具类的实现

    C#使用NPOI操作Excel工具类的实现

    NPOI是POI项目的.NET迁移版本,使用NPOI可以在没有安装Office或者相应环境的机器上对Word或Excel文档进行读写操作,下面我们就来学习一下如何使用NPOI编写操作Excel的工具类吧
    2023-11-11
  • 基于C#实现PDF文件合并工具

    基于C#实现PDF文件合并工具

    这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • C#调用pyd的方法

    C#调用pyd的方法

    这篇文章主要介绍了C#调用pyd的方法,帮助大家在项目中实现c#代码与python代码交互,在C#中调用python,也可以在python中调用C#.
    2020-11-11
  • C#简单写入xml文件的方法

    C#简单写入xml文件的方法

    这篇文章主要介绍了C#简单写入xml文件的方法,可实现C#针对XML文件简单写入的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#实现读取匿名对象属性值的方法示例总结

    C#实现读取匿名对象属性值的方法示例总结

    这篇文章主要介绍了C#实现读取匿名对象属性值的方法,结合实例形式总结分析了C#通过反射、转换等方法读取匿名对象属性值的相关操作技巧,需要的朋友可以参考下
    2020-03-03
  • 深入了解c# 迭代器和列举器

    深入了解c# 迭代器和列举器

    这篇文章主要介绍了c# 迭代器和列举器的相关资料,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下
    2020-08-08
  • C# ManualResetEvent使用方法详解

    C# ManualResetEvent使用方法详解

    这篇文章主要为大家详细介绍了ManualResetEvent使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论