【发布时间】:2013-05-07 15:41:31
【问题描述】:
如果我用StructureToPtr 编组这个结构,然后用PtrToStructure 再次解组它,我的第一个节点有 y = {1,2} 而我的第二个节点有 y = {1,0}。
我不知道为什么,也许我的结构在某种程度上是坏的?从结构中删除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 个字节有关?但我想不出确切的原因...... -
此外,它会忽略第一个元素之后的所有数组元素(将它们作为零写入非托管内存中)。
bool是在数组之前还是在结构之后也没关系。
标签: c# marshalling