Исправление массива массивов в C # (небезопасный код)

Я пытаюсь найти решение, как передать массив массивов из C # в нативную функцию. У меня уже есть делегат функции (Marshal.GetDelegateForFunctionPointer), но теперь я пытаюсь передать в него многомерный массив (точнее, массив массивов).

Этот пример кода работает, когда на входе 2 подмассивы, но мне нужно иметь возможность обрабатывать любое количество подмассивов. Какой самый простой способ сделать это? Я бы предпочел не копировать данные между массивами, так как это будет происходить в цикле реального времени (я общаюсь с помощью звукового эффекта)

public void process(float[][] input)
{
    unsafe
    {
        // If I know how many sub-arrays I have I can just fix them like this... but I need to handle n-many arrays
        fixed (float* inp0 = input[0], inp1 = input[1] )
        {
            // Create the pointer array and put the pointers to input[0] and input[1] into it
            float*[] inputArray = new float*[2];
            inputArray[0] = inp0;
            inputArray[1] = inp1;
            fixed(float** inputPtr = inputArray)
            {
                // C function signature is someFuction(float** input, int numberOfChannels, int length)
                functionDelegate(inputPtr, 2, input[0].length);
            }
        }
    }
}
7
задан Valdemar 14 November 2011 в 19:59
поделиться