0

以下は、c++ から c# に変換しようとしているコードです。

struct PSB {
   short    type_of_psb;
   short    call_dependent;
   int32    del_psb_status;
   uint32   seq_number[2];
   int32    uma_psb_status;
   short    psb_reserved[6];
} 

以前、以下の構造を書きました。

        [StructLayout(LayoutKind.Explicit)]
        public struct PSB
        {
            [FieldOffset(0)]
            public short type_of_psb;
            [FieldOffset(2)]
            public short call_dependent;
            [FieldOffset(4)]
            public int del_psb_status;
            [FieldOffset(8)]
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public uint32 seq_number; // Here is the problem
            [FieldOffset(16)]
            public int uma_psb_status;
            [FieldOffset(20)]
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public short[] psb_reserved;
        }

しかし、上記の C# コードは機能しません。問題はメンバseq_numberにあります

だから私はそれを

public ulong seq_numberからuint seq_number、上記のマーシャラス属性を削除しました。

現在、レガシーコードで動作しています。どうしてか分かりません ?配列として like を定義した場合の問題は何ですか?

4

1 に答える 1