Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用AddRofPindedObject解决算术溢出_C#_.net - Fatal编程技术网

C# 调用AddRofPindedObject解决算术溢出

C# 调用AddRofPindedObject解决算术溢出,c#,.net,C#,.net,我正在使用lib预览和捕获捕获卡中的快照 图书馆: 它是为.NET2.0构建的,当从.NET2.0或3.5项目调用这些类和控件时,一切都可以完美地工作 当我从一个.NET4.0项目中添加对它的引用时,我得到了一个奇妙的例外 Arithmetic operation resulted in an overflow. 当试图: GCHandle handle = GCHandle.Alloc(this.savedArray, GCHandleType.Pinned); int scan0 = (i

我正在使用lib预览和捕获捕获卡中的快照

图书馆:

它是为.NET2.0构建的,当从.NET2.0或3.5项目调用这些类和控件时,一切都可以完美地工作

当我从一个.NET4.0项目中添加对它的引用时,我得到了一个奇妙的例外

Arithmetic operation resulted in an overflow.
当试图:

GCHandle handle = GCHandle.Alloc(this.savedArray, GCHandleType.Pinned);
int scan0 = (int)handle.AddrOfPinnedObject();
我很乐意将我的应用程序更改为.NET2.0,但我需要它位于.NET4.0中,以引用其他LIB

我不知道怎么解决这个问题。我曾尝试在.NET4.0中编译这些LIB,并获得了成功,但在执行这段代码时,出现了同样的问题。这可能是.NET4.0中的问题吗


我迷路了。如果您能在这方面提供一些指导,那就太好了。

一个
int
是一个32位整数。如果您在64位计算机上,地址不是32位,而是64位

使用
Int64
long
)来匹配处理器的地址长度:

long scan0 = (long)handle.AddrOfPinnedObject();
或者,更好的是,打电话:


看看这个,堆栈跟踪显示了什么?它有任何内部异常吗?@Pavenhimself:不错的帖子,但不完全相关。使用IntPtr不是更正确吗?然后它应该适用于任何一种体系结构。@RenniePet:
handle
是一种
IntPtr
。将构建“平台目标”设置为“x86”也解决了这个问题。但将变量更新为long似乎更为正确。谢谢。@user3149304:这是真的,因为它的运行方式与在32位平台上的运行方式相同。
long scan0 = handle.AddrOfPinnedObject().ToInt64();