编组数据类型问题

时间:2013-04-09 12:32:40

标签: c#

下面是我试图从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,我删除了上面的marshalas属性。

现在它正在使用遗留代码。我不知道为什么?如果我将其定义为数组,会出现什么问题?

1 个答案:

答案 0 :(得分:1)

您的C ++结构和MarshalAs属性都将类型列为数组,但您的C#结构只声明了一个数字。我不确定你到底发生了什么错误,但看起来你试图将两个数字的数组转换成一个数字,这显然会引起一些问题。

尝试将MarshalAs属性保留在已发布的结构中,只需将public uint32 seq_number;替换为public uint32[] seq_number;