ssyuvaraja Ответов: 1

Маршал.копия кидает ошибку, как попытка чтения или записи в защищенную память


Привет,

У меня есть
IntPtr
переменная, полученная из кода c++. Который является целочисленным массивом в коде c++, попробуйте преобразовать его в массив Interger в коде c#. Бросая ошибку как,

"
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
"

Что я уже пробовал:

public IntPtr iHeartBeat;

int[] value = new int[8];


Нижеприведенная строка-это одна ошибка броска
Marshal.Copy(iHeartBeat, value, 0, 8);

TheRealSteveJudge

Какая платформа является DLL C++? x86 или x64? Какова целевая платформа вашего решения на языке C#?

1 Ответов

Рейтинг:
0

OriginalGriff

Начните с использования отладчика, чтобы посмотреть, что находится в iHeartbeat - я предполагаю, что это не допустимое значение указателя, и что вам нужно посмотреть, откуда именно вы получаете это значение. Либо он возвращает код ошибки, который вы игнорируете, он не устанавливается ни на что, либо это проблема с тем, как вы вызываете код C++.

Мы не можем сказать - он нуждается в коде, и чтобы код работал, чтобы узнать любую информацию, и мы не можем сделать ничего из этого для вас! Так что вырывайтесь из отладчика и начинайте искать именно то, что происходит!


ssyuvaraja

Проблема в том, что я пытаюсь преобразовать "int iHeartBeat[4]" c++. К IntPtr из C#. На самом деле мне нужно создать "int* iHeartBeat=new int[4]" в коде c++. Все решено. Спасибо.