如果我用StructureToPtr
编组这个结构,然后再用PtrToStructure
解组它,我的第一个节点有y = {1,2},而我的第二个节点有y = {1,0}。Marshal.StructureToPtr失败与布尔和固定大小的数组?
我不知道为什么,也许我的结构不好?从结构中删除bool
使其工作。
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);
}
}
}
也许它必须做一些事情,把'bool'编组为4字节('BOOL')而不是1个字节?但我想不出确切的原因...... – Mehrdad 2012-02-05 19:37:07
此外,它忽略了第一个数组元素之后的任何数组元素(将它们作为零写入非托管内存中)。如果'bool'出现在阵列之前或结构之后,也没有关系。 – GSerg 2012-02-05 19:42:29