Estoy implementando una clase de matriz no administrada en C# que necesito para algunas llamadas OpenGL.Implementación de una matriz genérica no administrada en C#
Va muy bien, pero he dado en un obstáculo. El siguiente código no se compila, y entiendo por qué, pero ¿cómo puedo hacerlo funcionar?
public T this[int i]
{
get { return *((T*)arrayPtr + i); }
set { *((T*)arrayPtr + i) = value; }
}
pensé que podría funcionar si me aseguré de que T es una estructura
unsafe class FixedArray<T> where T : struct
no funciona bien ...
¿Cómo puedo conseguir algo funcionalmente a lo que equivilant Estoy tratando de hacer lo anterior?
EDITAR: Estoy usando una matriz no administrada con Marshal.AllocHGlobal() para que mi arreglo sea fijo y el GC no lo mueva. OpenGL en realidad no procesa las instrucciones cuando lo llamas, OpenGL intentará acceder a la matriz mucho después de que la función haya regresado.
Aquí está toda la clase si eso ayuda:
unsafe class FixedArray<T> where T : struct
{
IntPtr arrayPtr;
public T this[int i]
{
get { return *((T*)arrayPtr + i); }
set { *((T*)arrayPtr + i) = value; }
}
public FixedArray(int length)
{
arrayPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(T)) * length);
}
~FixedArray()
{
Marshal.FreeHGlobal(arrayPtr);
}
}
El mensaje de error es no puede tomar la dirección de, obtener el tamaño de, o declarar un puntero a un tipo administrado ('T')
Por favor, incluya el mensaje de error. – Richard
¿Estás seguro de que necesitas una matriz no administrada? – Gabe
Sí, estoy seguro. Lo intenté por primera vez y obtuve AccessViolationExceptions. – Hannesh