我尝试在 c# 中编组一个非托管的 c++ dll,但编组器在创建我的联合时失败。
为什么这段代码会失败?
[StructLayout(LayoutKind.Sequential)]
public struct StructWithArray
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public int[] MySimpleArray;
//More Stuff
}
[StructLayout(LayoutKind.Explicit)]
public struct Union
{
[FieldOffset(0)]
public int Int; //Or anything else
[FieldOffset(0), MarshalAs(UnmanagedType.Struct)]
public StructWithArray MyStructWithArray;
//More Structs
}
然后构建联盟:
Union MyUnion = new Union();
如果我使用以下消息运行代码,它将失败:(已翻译)
{“无法加载程序集 [...] 的类型“联合”,因为它在偏移量 0 处包含一个对象字段,该字段未正确对齐或被非对象字段的字段重叠”:“联合”}
有什么建议么?
Ps:原始代码被大量简化以仅显示问题。还有更多的 Struct,Union 也包含在另一个 Struct 中。