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;

    测试通过。

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/Gun/p/2976470.html
Copyright © 2011-2022 走看看