Estoy tratando de encontrar una solución sobre cómo puedo pasar una matriz de matrices desde C# a una función nativa. Ya tengo un delegado para la función (Marshal.GetDelegateForFunctionPointer), pero ahora estoy tratando de pasar una matriz multidimensional (o más bien, una matriz de matrices) en ella.Reparando una matriz de matriz en C# (código inseguro)
Este ejemplo de código funciona cuando la entrada tiene 2 sub-arrays, pero necesito poder manejar cualquier cantidad de sub-arrays. ¿Cuál es la manera más fácil que se te ocurre para hacer eso? Yo prefiero no para copiar los datos entre matrices como este que va a ocurrir en un bucle en tiempo real (estoy comunicando con un efecto de 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);
}
}
}
}
Había leído sobre la clase GCHandle. Después de leer su respuesta intenté implementarla para mi llamada y parece estar funcionando bastante bien. Gracias por una respuesta rápida. – Valdemar