C# 重新创建C+时发生对齐错误+;C中具有非基元类型的并集类型# 我有一个简单的联合(字节数组和一个短),在C++中,我试图把它移植到C语言,得到不能加载类型…联盟。。。因为它包含偏移量为0的对象字段,该字段未正确对齐或与非对象字段重叠。我怀疑我的实现不起作用,因为我将数组作为结构成员之一 现有C++联盟: union { char c[2]; short data; } u;
尝试的C#实施:C# 重新创建C+时发生对齐错误+;C中具有非基元类型的并集类型# 我有一个简单的联合(字节数组和一个短),在C++中,我试图把它移植到C语言,得到不能加载类型…联盟。。。因为它包含偏移量为0的对象字段,该字段未正确对齐或与非对象字段重叠。我怀疑我的实现不起作用,因为我将数组作为结构成员之一 现有C++联盟: union { char c[2]; short data; } u;,c#,c++,struct,marshalling,unions,C#,C++,Struct,Marshalling,Unions,尝试的C#实施: [StructLayout(LayoutKind.Explicit, Size =2)] public struct Union { [MarshalAs(UnmanagedType.LPArray)] [FieldOffset(0)] public byte[] c; [FieldOffset(0)] public short data; } 以前也回答过类似的问题,但它似乎只适用于基本类型: 提前谢谢。您尝试过“StructLayo
[StructLayout(LayoutKind.Explicit, Size =2)]
public struct Union
{
[MarshalAs(UnmanagedType.LPArray)]
[FieldOffset(0)]
public byte[] c;
[FieldOffset(0)]
public short data;
}
以前也回答过类似的问题,但它似乎只适用于基本类型:
提前谢谢。您尝试过“StructLayout(LayoutKind.Explicit,Size=2,Pack=1)”吗?C默认为4字节的封装大小似乎有问题