程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 解決C# X64應用程序中讀取WParam溢出的問題

解決C# X64應用程序中讀取WParam溢出的問題

編輯:C#基礎知識

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

測試通過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved