我有一个我正在尝试Marshal的结构,其定义如下:
enum BBB {BB1 =1, BB2 =2}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct Foo
{
[MarshalAs(UnmanagedType.I2)]
public BBB F1;
public int F2;
public short F3;
}
似乎Marshal无法处理此枚举字段规范并抛出异常: 无法作为非托管结构进行整理;没有有意义的大小或偏移量可以计算。 如果我删除[MarshalAs(UnmanagedType.I2)],那么编组成功,但我希望能够将枚举字段编组为自定义大小字段,不一定是4字节字段。
有没有人遇到过这个问题?
答案 0 :(得分:1)
您应该将枚举声明为ushort
:
enum BBB : ushort {BB1 = 1, BB2 = 2}