Identificando uma função nativa com argumentos de matriz

Estou completamente confuso com como proceder para chamar funções na dll nativa com argumentos de matriz.

Exemplo:

A função é definida no projeto C # como:

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

E a chamada de função é:

modifyArray(arr, 3)

onde arr = {4,5,6}

A definição da função C ++ nativa é a seguinte:

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

Por que no projeto C #, a matriz não está apontando para a nova matriz após a chamada da função? Ainda permanece {4,5,6}.

Eu tentei isso, mas falhei

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

Esse pinvoke falha sempre que tento modificar os argumentos passados para essas funções usando ponteiros. Caso contrário, tive êxito ao passar argumentos de matriz ref para funções de classificação dll nativas em que não há alterações de ponteiro para tipos recém-criados.

questionAnswers(2)

yourAnswerToTheQuestion