X64 WParam溢出 解决C# X64应用程序中读取WParam溢出的问题
人气:0想了解解决C# X64应用程序中读取WParam溢出的问题的相关内容吗,在本文为您仔细讲解X64 WParam溢出的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:X64,WParam,溢出,下面大家一起来学习吧。
在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;
测试通过。
加载全部内容