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

时间:2022-01-22 17:41:03 

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

测试通过。

标签:X64,WParam,溢出
0
投稿

猜你喜欢

  • Jenkins自动构建部署项目到远程服务器上的方法步骤

    2023-11-25 00:21:40
  • C#中在WebClient中使用post发送数据实现方法

    2023-05-01 00:03:54
  • java实现登录验证码功能

    2021-06-08 19:34:18
  • java微信开发API第一步 服务器接入

    2023-08-24 11:18:26
  • Java 处理超大数类型之BigInteger案例详解

    2021-06-20 15:36:38
  • Spring深入刨析声明式事务注解的源码

    2023-10-23 09:41:48
  • springboot跨域CORS处理代码解析

    2022-07-29 21:12:20
  • Java接口的简单定义与实现方法示例

    2022-11-22 05:04:43
  • C#语言中条件与&&与条件或||的区别

    2022-10-06 22:51:55
  • Spring Boot Redis 集成配置详解

    2022-12-05 20:57:59
  • 浅谈JSON的数据交换、缓存问题和同步问题

    2021-08-08 09:31:25
  • 基于<aop:aspect>与<aop:advisor>的区别

    2023-01-22 21:53:35
  • 简单了解Spring中常用工具类

    2021-09-24 10:44:28
  • java之使用多线程代替for循环(解决主线程提前结束问题)

    2021-11-21 01:23:55
  • Android仿微信照片选择器实现预览查看图片

    2022-02-03 12:25:51
  • 使用ehcache三步搞定springboot缓存的方法示例

    2021-06-25 04:44:12
  • 详解Java ES多节点任务的高效分发与收集实现

    2021-08-03 13:59:02
  • C#实现UI控件输出日志的方法详解

    2021-10-07 02:45:41
  • Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法

    2023-02-26 21:34:17
  • Django之多对多查询与操作方法详解

    2021-08-03 03:21:58
  • asp之家 软件编程 m.aspxhome.com