2016-07-25 71 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#不同)。 –