WParam溢出处理X64应用程序中的难题
时间:2023-10-15 12:13:36 静子
C#AnyCPU的应用程序在解决鼠标中键WM_MOUSEWHEL代码中溢出问题的Overflowexception。在X86环境中,var wParam = (int)msg.WParam;工作得很好。在X64环境中,快速翻转滚轴会有msg.WParam 当转换为int时,外溢,(WPa
C#AnyCPU的应用程序在解决鼠标中键WM_MOUSEWHEL代码中溢出问题的Overflowexception。
在X86环境中,
var wParam = (int)msg.WParam;
工作得很好。
在X64环境中,
快速翻转滚轴会有msg.WParam 当转换为int时,外溢,(WParam=4263510016)。
信息为:
Systemem没有处理.OverflowException
Message=逻辑操作导致溢出。
Source=mscorlib
StackTrace:
在 System.IntPtr.op_Explicit(IntPtr value)
在 TIM.MouseWheelHandler.MouseWheelMessageFilter.PreFilterMessage(Message& m) 部位。。。。
验证WParam的IntPtram,MSDN说
IntPtr 类型设计成整数,其尺寸适用于特殊服务平台。也就是说,这种类型的案例是 32 位置硬件和计算机操作系统 32 位,在 64 位置硬件和计算机操作系统 64 位。
因此,应给出上述编码:
var wParam = (IntPtr.Size == 8) ? (int)((long)msg.WParam << 32 >> 32) : (int)msg.WParam;