Considere una estructura como System.Drawing.Point - una con LayoutKind.Sequential y que solo contenga miembros primitivos. Tengo una matriz de C# de tales estructuras.Matriz de estructuras de .NET a C++: ¿cuándo se copia?
Lo estoy pasando a una función (no administrada) de C++ a través de P/Invoke. En el lado de C++ hay una definición correspondiente de la estructura (por ejemplo, struct Point { int x, y; };
). La función toma un Point*
arg.
Mi pregunta es, ¿en qué casos el CLR copia los datos y en qué casos simplemente lo fija? Las variables incluyen:
- tipo de matriz: unidimensional o rectangular
- C# definición de la función - con ayuda de
Point*
oPoint[]
/Point[,]
- usando
fixed(Point* pointer = array)
o no
quiero evitar la copiando porque es lento.
No está documentado, las matrices simples simplemente quedan inmovilizadas. Use el depurador en caso de duda, escriba '* & array' para obtener la dirección de la matriz en C#. Y compare con el valor del puntero que obtiene en el código nativo. +8 en modo de 32 bits. –