Sto cercando di trovare una soluzione su come posso passare una matrice di array da C# a una funzione nativa. Ho già un delegato alla funzione (Marshal.GetDelegateForFunctionPointer), ma ora sto provando a passare una matrice multidimensionale (o meglio una matrice di matrici) in essa.Correzione di una matrice di array in C# (codice non sicuro)
Questo esempio di codice funziona quando l'input ha 2 sotto-array, ma devo essere in grado di gestire qualsiasi numero di sotto-array. Qual è il modo più semplice in cui puoi pensare di farlo? Preferirei non per copiare i dati tra gli array come questo accadrà in un loop in tempo reale (sto comunicando con un effetto audio)
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);
}
}
}
}
Ho letto della classe GCHandle. Dopo aver letto la tua risposta, ho provato ad implementarlo per la mia chiamata e sembra che funzioni abbastanza bene. Grazie per una rapida risposta. – Valdemar