Вызов родной функции с аргументами массива
Я полностью запутался с тем, как идти о вызове функций в 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, в которых нет изменений указателей на вновь созданные типы.