关于鼠标移动时候的System.OverflowException异常,已解决
我找了下源码,看到有一处类型转换会报这种异常 在STNodeEditor.cs类的第634行 Point pt = new Point(((int)m.LParam) >> 16, (ushort)m.LParam); 这里的强制转换会报算术运算溢出 改成下面这样写就兼容了 int x = (short)((m.LParam.ToInt64() >> 16) & 0xFFFF); int y = (short)(m.LParam.ToInt64() & 0xFFFF); Point pt = new Point(x, y);
我找了下源码,看到有一处类型转换会报这种异常 在STNodeEditor.cs类的第634行 Point pt = new Point(((int)m.LParam) >> 16, (ushort)m.LParam); 这里的强制转换会报算术运算溢出 改成下面这样写就兼容了 int x = (short)((m.LParam.ToInt64() >> 16) & 0xFFFF); int y = (short)(m.LParam.ToInt64() & 0xFFFF); Point pt = new Point(x, y);
LParam是一个IntPtr(指针)类型,如果是32位程序那么是4字节 64位程序则是8字节。。本质上来说还是一个数字。。讲道理 数字之前强转应该是不会有问题的。。并且我试了一下
Console.WriteLine(IntPtr.Size);
var p = (IntPtr)(0x00000000_00FF00FF);
var i = (int)p;
var us = (ushort)p;
但是并没有报错。。。所以我也是懵的。。。
我找了下源码,看到有一处类型转换会报这种异常 在STNodeEditor.cs类的第634行 Point pt = new Point(((int)m.LParam) >> 16, (ushort)m.LParam); 这里的强制转换会报算术运算溢出 改成下面这样写就兼容了 int x = (short)((m.LParam.ToInt64() >> 16) & 0xFFFF); int y = (short)(m.LParam.ToInt64() & 0xFFFF); Point pt = new Point(x, y);
LParam是一个IntPtr(指针)类型,如果是32位程序那么是4字节 64位程序则是8字节。。本质上来说还是一个数字。。讲道理 数字之前强转应该是不会有问题的。。并且我试了一下
Console.WriteLine(IntPtr.Size); var p = (IntPtr)(0x00000000_00FF00FF); var i = (int)p; var us = (ushort)p;但是并没有报错。。。所以我也是懵的。。。
试试这个 0x000000b53eefb680
我找了下源码,看到有一处类型转换会报这种异常 在STNodeEditor.cs类的第634行 Point pt = new Point(((int)m.LParam) >> 16, (ushort)m.LParam); 这里的强制转换会报算术运算溢出 改成下面这样写就兼容了 int x = (short)((m.LParam.ToInt64() >> 16) & 0xFFFF); int y = (short)(m.LParam.ToInt64() & 0xFFFF); Point pt = new Point(x, y);
LParam是一个IntPtr(指针)类型,如果是32位程序那么是4字节 64位程序则是8字节。。本质上来说还是一个数字。。讲道理 数字之前强转应该是不会有问题的。。并且我试了一下
Console.WriteLine(IntPtr.Size); var p = (IntPtr)(0x00000000_00FF00FF); var i = (int)p; var us = (ushort)p;但是并没有报错。。。所以我也是懵的。。。
试试这个 0x000000b53eefb680
在.NET环境中没有任何问题 但是在X64的Framework环境中出现溢出。