解決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)文章
C#實(shí)現(xiàn)裝箱與拆箱操作簡(jiǎn)單實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)裝箱與拆箱操作,對(duì)于新手理解裝箱與拆箱有一定的幫助,需要的朋友可以參考下2014-07-07
C#使用RabbitMq隊(duì)列(Sample,Work,Fanout,Direct等模式的簡(jiǎn)單使用)
這篇文章主要介紹了C#使用RabbitMq隊(duì)列(Sample,Work,Fanout,Direct等模式的簡(jiǎn)單使用),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
C#中的DataTable查詢實(shí)戰(zhàn)教程
這篇文章主要介紹了C#中的DataTable查詢實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
C#使用NPOI操作Excel工具類的實(shí)現(xiàn)
NPOI是POI項(xiàng)目的.NET遷移版本,使用NPOI可以在沒(méi)有安裝Office或者相應(yīng)環(huán)境的機(jī)器上對(duì)Word或Excel文檔進(jìn)行讀寫(xiě)操作,下面我們就來(lái)學(xué)習(xí)一下如何使用NPOI編寫(xiě)操作Excel的工具類吧2023-11-11
C#實(shí)現(xiàn)讀取匿名對(duì)象屬性值的方法示例總結(jié)
這篇文章主要介紹了C#實(shí)現(xiàn)讀取匿名對(duì)象屬性值的方法,結(jié)合實(shí)例形式總結(jié)分析了C#通過(guò)反射、轉(zhuǎn)換等方法讀取匿名對(duì)象屬性值的相關(guān)操作技巧,需要的朋友可以參考下2020-03-03

