zoukankan      html  css  js  c++  java
  • 解决X64应用程序中读取WParam溢出的问题

    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;

    测试通过。

  • 相关阅读:
    jq ajax注册检查用户名
    jq ajax页面交互
    Digit Counting UVA – 1225
    Molar mass UVA – 1586
    P1571 眼红的Medusa
    A. Digits Sequence Dividing
    Codeforces Round #535 (Div. 3) a题
    Digit Generator UVA – 1583
    Good Bye 2018 B
    电梯 HDU – 1008
  • 原文地址:https://www.cnblogs.com/Gun/p/2976470.html
Copyright © 2011-2022 走看看