首页 > 解决方案 > 我将如何缩短内存地址以便它在 IntPtr 中工作?

问题描述

我有问题。因此,我正在开发一个能够更改内存中浮点数的应用程序,但我拥有的地址对于 IntPtr 来说太长了。

这是我的代码:

VAMemory vam = new VAMemory("APP NAME");

IntPtr ad = 0x264A373E7C0;

vam.WriteByte(ad, (Byte)100); 

所以在这个 ^ WriteByte 中它说 IntPtr 地址太长。我以前使用过这段代码,它已经工作了,但不知何故,它不适用于这个地址。

标签: c#memorybyteintptr

解决方案


如果IntPtr.Size == 4那么您的程序的目标是32bit

即使您选择了AnyCPU架构,从 VS2013 开始,还有一个名为的项目构建属性Prefer 32-bit,必须在64 位机器上关闭才能获得IntPtr.Size == 8.

使用Perfer 32-Bitflavor ofAnyCPU时,语义如下:

  • 如果进程在32 位Windows 系统上运行,则它作为32 位进程运行。IL被编译成x86机器码。
  • 如果进程在64 位Windows 系统上运行,则它作为32 位进程运行。IL被编译成x86机器码。
  • 如果进程在ARM Windows 系统上运行,它将作为32 位进程运行。IL被编译为ARM机器码。

推荐阅读