2016-07-25 65 views
1

我有我试图元帅被定义为一个结构如下:元帅失败与自定义大小的枚举场结构

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; 
    } 

好像元帅无法处理此枚举字段规范并抛出例外: 不能作为非托管结构编组;无法计算出有意义的大小或偏移量。 如果我删除[MarshalAs(UnmanagedType.I2)],然后编组成功,但我希望能够编组枚举字段作为自定义大小字段不一定是4字节。

有没有人遇到过这个问题?

回答

1

你应该声明的枚举为ushort

enum BBB : ushort {BB1 = 1, BB2 = 2} 
+0

感谢德克的作品。 – dmg

+0

如果我在F#中工作,我无法指定枚举类型的大小:类型BBB = | BB1 = 1 | BB2 = 2? – dmg

+1

@dmg:我对F#不太熟悉,但我的猜测是,那是不可能的。并非所有的.NET语言都支持相同的功能,并且与本机代码的互操作性(也可以编组为本地类型)并不是F#的目标(与C#不同)。 –