Как бы я сократил адрес памяти, чтобы он работал в IntPtr? - PullRequest
0 голосов
/ 10 июня 2018

У меня проблема.Поэтому я работаю над приложением, которое сможет изменять число с плавающей запятой в памяти, но у меня слишком длинный адрес для IntPtr.

Вот мой код:

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

IntPtr ad = 0x264A373E7C0;

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

Итак, в этом ^ WriteByte написано, что адрес IntPtr слишком длинный.Я использовал этот код раньше, и он работал, но почему-то он не работает с этим адресом.

1 Ответ

0 голосов
/ 10 июня 2018

Если IntPtr.Size == 4, тогда ваша программа нацелена на 32bit .

Даже если вы выбрали архитектуру AnyCPU, начиная с VS2013, существует свойство сборки проекта под названием Prefer 32-bit, и для получения IntPtr.Size == 8 его необходимо отключить на 64-битных машинах.

При использовании варианта Perfer 32-Bit для AnyCPU семантика выглядит следующим образом:

  • Если процесс выполняется в 32-битной системе Windows, онработает как 32-битный процесс. IL компилируется в x86 машинный код.
  • Если процесс выполняется в системе 64bit Windows, он запускается как 32bit процесс. IL компилируется в x86 машинный код.
  • Если процесс выполняется в системе ARM Windows, он запускается как 32bit процесс. IL компилируется в ARM машинный код.
...