Si clasifico esta estructura con StructureToPtr
y luego la elimino de nuevo con PtrToStructure
, mi primer nodo tiene y = {1,2} mientras que mi segundo nodo tiene y = {1,0}.Marshal.StructureToPtr falla con bool y matriz de tamaño fijo?
No tengo idea de por qué, tal vez mi estructura es mala de alguna manera? Eliminar el bool
de la estructura lo hace funcionar.
using System;
using System.Runtime.InteropServices;
namespace csharp_test
{
unsafe class Program
{
[StructLayout(LayoutKind.Sequential)]
public struct Node
{
public bool boolVar;
public fixed int y[2];
}
unsafe static void Main(string[] args)
{
Node node = new Node();
node.y[0] = 1;
node.y[1] = 2;
node.boolVar = true;
int size = sizeof(Node);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(node, ptr, false);
Node node2 = (Node)Marshal.PtrToStructure(ptr, typeof(Node));
Marshal.FreeHGlobal(ptr);
}
}
}
Tal vez tiene que hacer algo con 'bool' siendo clasificado como 4 bytes (' BOOL') en lugar de 1 byte? Pero no puedo pensar en la razón exacta ... – Mehrdad
Además, ignora los elementos de la matriz después de la primera (los escribe como ceros en la memoria no administrada). Tampoco importa si 'bool' viene antes de la matriz o después en la estructura. – GSerg