2016-07-25 12 views
1

のenumフィールドを持つ構造体のために失敗します:元帥は、私は次のように定義されて、私は元帥にしようとしている構造体を持っているカスタムサイズ

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#で作業しているのですが、enum型のサイズを指定できないのはどういう意味ですか?type BBB = | BB1 = 1 | BB2 = 2? – dmg

+1

@dmg:私はF#にあまり慣れていませんが、私の推測によれば、それはちょうど不可能です。すべての.NET言語が同じ機能をサポートしているわけではなく、ネイティブコードとの相互運用性(およびネイティブタイプにマーシャリングできる)は、F#の目標ではありませんでした(C#とは対照的です)。 –

関連する問題