Как передать массив из C# в C++(dll), но мне еще нужно изменить этот массив в C++?
| Код | int[] pole; [DllImport("Sudoky(dll).dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool StartSudokyProfi(int[] pol, ref int[] po); [MarshalAs(UnmanagedType.LPArray, SizeConst = 81)] int[] ff; private void button1_Click(object sender, EventArgs e) { int num = 0; for (int j = 0; j < 81; j++) { if (Textbox[num].Text == "") pole[num] = 0; else pole[num] = Convert.ToInt32(Textbox[num].Text); num++; } ff = new int[81]; bool b = StartSudokyProfi(pole, ref ff); }
|
| Код | extern "C" __declspec(dllexport) bool StartSudokyProfi(int (pol[]),int *&po,bool flag/*= false*/ ) { bool b; int num = 0; int pp[9][9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { pp[i][j] = pol[num++]; } } Pole map(pp); b = map.startpodsch(); num = 0; for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) { po[num] = map.pole[i][j]; num++; } return b; }
|
Я не понимаю смысла: [MarshalAs(UnmanagedType.LPArray, SizeConst = 81)], мне казалось что эта строчка выделяет память для массива, но массив остается равен null, а при po[num] = map.pole[i][j]; возникает ошибка: Запись или чтение из защищенной памяти. Но при создании массива: ff = new int[81]; ошибка исчезает но массив после функции StartSudokyProfi содержит только один элемент |