Я работаю над проектом, в котором требуется передать массив объектов из С# в С++ по ссылке, и когда я передаю один объект по ссылке, он успешно возвращается по новому значению, но когда я передаю массив, он возвращается со старым значением, так что не так с мой код?
Код C++
extern "C" __declspec(dllexport) int solve(Cell*(&xx)[5][5]) {
xx[0][0]->side = 55;
return xx[0][0]->side;
}
и код C#
internal static class UnsafeMethods
{
[DllImport(@"E:\Cs\4th Year\HPC\Parallel_calculations\Debug\Parallel_calculations.dll", EntryPoint = "solve", CallingConvention = CallingConvention.Cdecl)]
public static extern int solve([MarshalAs(UnmanagedType.SafeArray)] ref Cell[,] x);
}
Cell[,] arr = new Cell[5, 5];
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int y = 0; y < arr.GetLength(1); y++)
{
arr[i, y] = new Cell(0, 0, 0, false, false, false, 50);
}
}
arr[0, 0].side = 4;
int x = UnsafeMethods.solve(ref arr);
Console.WriteLine(x + " " + arr[0, 0].side);
x с новым значением, но arr[0,0].side возвращает старое значение