Вызов родной функции с аргументами массива

Я полностью запутался с тем, как идти о вызове функций в native dll с аргументами массива.

Пример:

Функция определена в проекте C # как:

[DllImport("Project2.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
static extern void modifyArray([MarshalAs(UnmanagedType.LPArray)] int[] x, int len);

И вызов функции:

modifyArray(arr, 3)

где обр = {4,5,6}

Определение нативной функции C ++ выглядит следующим образом:

extern "C" _declspec(dllexport) void modifyArray(int* x,int len)
{   
        int arr[] = {1,2,3};
        x = arr;
}

Почему в проекте C # массив не указывает на новый массив после вызова функции? Это все еще остается {4,5,6}.

Я пытался это, но не удалось

[DllImport("Project2.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
static extern void modifyArray([In,Out] int[] x, int len);

Этот pinvoke завершается ошибкой всякий раз, когда я пытаюсь изменить аргументы, переданные этим функциям, используя указатели. В противном случае мне удалось передать аргументы массива ref для собственных функций сортировки dll, в которых нет изменений указателей на вновь созданные типы.

Ответы на вопрос(2)

Ваш ответ на вопрос