解決C# X64應(yīng)用程序中讀取WParam溢出的問(wèn)題
在X86的環(huán)境下,
var wParam = (int)msg.WParam;
工作得很好。
在X64的環(huán)境下,
快速滾動(dòng)滾輪會(huì)出現(xiàn)msg.WParam 轉(zhuǎn)換為int的時(shí)候溢出,(WParam=4263510016)。
信息為:
未處理System.OverflowException
Message=算術(shù)運(yùn)算導(dǎo)致溢出。
Source=mscorlib
StackTrace:
在 System.IntPtr.op_Explicit(IntPtr value)
在 TIM.MouseWheelHandler.MouseWheelMessageFilter.PreFilterMessage(Message& m) 位置。。。
查證WParam是IntPtr,MSDN說(shuō)
IntPtr 類型被設(shè)計(jì)成整數(shù),其大小適用于特定平臺(tái)。即是說(shuō),此類型的實(shí)例在 32 位硬件和操作系統(tǒng)中將是 32 位,在 64 位硬件和操作系統(tǒng)上將是 64 位。
所以,上面的代碼應(yīng)該為:
var wParam = (IntPtr.Size == 8) ? (int)((long)msg.WParam << 32 >> 32) : (int)msg.WParam;
測(cè)試通過(guò)。
相關(guān)文章
WPF PasswordBox進(jìn)行數(shù)據(jù)綁定方法
有的時(shí)候會(huì)遇見(jiàn)PasswordBox的Password屬性不是依賴屬性,因此無(wú)法進(jìn)行數(shù)據(jù)綁定。本文介紹如何通過(guò)添加附加屬性解決該問(wèn)題,有此問(wèn)題的同學(xué)可以參考下本文2021-06-06C#操作Byte數(shù)組和十六進(jìn)制進(jìn)行互轉(zhuǎn)
這篇文章介紹了C#操作Byte數(shù)組和十六進(jìn)制進(jìn)行互轉(zhuǎn)的的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法
這篇文章主要介紹了初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法,本文著重講解Lambda表達(dá)式和匿名方法的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-01-01C#控制IE進(jìn)程關(guān)閉和緩存清理的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#控制IE進(jìn)程關(guān)閉和緩存清理的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-04-04Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片
這篇文章主要介紹了Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片,在window系統(tǒng)中,自帶的鼠標(biāo)外觀可能看起來(lái)比較小,因此我們需要使用自己的鼠標(biāo)圖片外觀2020-11-11