c# - 我将如何缩短内存地址以便它在 IntPtr 中工作?
问题描述
我有问题。因此,我正在开发一个能够更改内存中浮点数的应用程序,但我拥有的地址对于 IntPtr 来说太长了。
这是我的代码:
VAMemory vam = new VAMemory("APP NAME");
IntPtr ad = 0x264A373E7C0;
vam.WriteByte(ad, (Byte)100);
所以在这个 ^ WriteByte 中它说 IntPtr 地址太长。我以前使用过这段代码,它已经工作了,但不知何故,它不适用于这个地址。
解决方案
如果IntPtr.Size == 4
那么您的程序的目标是32bit。
即使您选择了AnyCPU
架构,从 VS2013 开始,还有一个名为的项目构建属性Prefer 32-bit
,必须在64 位机器上关闭才能获得IntPtr.Size == 8
.
使用Perfer 32-Bit
flavor ofAnyCPU
时,语义如下:
- 如果进程在32 位Windows 系统上运行,则它作为32 位进程运行。IL被编译成x86机器码。
- 如果进程在64 位Windows 系统上运行,则它作为32 位进程运行。IL被编译成x86机器码。
- 如果进程在ARM Windows 系统上运行,它将作为32 位进程运行。IL被编译为ARM机器码。
推荐阅读
- apache-spark - 使用 Spark 从不同机器的 HDFS 读取数据
- java - 基于 XML 和 Annotations 的 Spring Websockets
- ionic-framework - 构建Android APK时出现离子应用程序错误
- python - ssh 到没有使用 ps 命令从 python 列出 PID 的 linux 服务器
- java - 通过shell脚本构建maven时出现Hibernate JDBC Connection Exception
- ios - 如何管理企业分发临时配置文件到期?
- html - HTML 中的 URL 和所需链接的 URL 不相同
- awk - 使用 bash 进行基于列和行的修改
- ios - 可以在 xcode 项目文件中使用 fastlane 命令配置 Jenkins 管道
- google-chrome - Codeception,如何填写日期选择器或按数字