C# 编组数据类型问题 下面是我试图从C++转换成C<< /p>的代码

C# 编组数据类型问题 下面是我试图从C++转换成C<< /p>的代码,c#,C#,之前,我写了下面的结构 [StructLayout(LayoutKind.Explicit)] public struct PSB { [FieldOffset(0)] public short type_of_psb; [FieldOffset(2)] public short call_dependent; [FieldOff

之前,我写了下面的结构

        [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#代码不起作用,问题在于成员序号

所以我把它改成了

public ulong seq_number
来自
uint seq_number
,我删除了上面的marshallas属性


现在它正在处理遗留代码。我不知道为什么?如果我定义为数组,那么问题是什么?

< p>你的C++结构和你的代码> MsHalalas[/Cuff]属性都把这个类型列为数组,但是你的C结构只是声明了一个数字。我不确定您到底遇到了什么错误,但看起来您试图将两个数字的数组转换为一个数字,这显然会导致一些问题


尝试将
marshallas
属性保持在发布的结构中,只需替换
public uint32序列号带有
公共uint32[]序号

我看不出
序列号
是一个数组。它不应该是
公共uint32[]seq\u number
,我猜ulong可以工作,因为它将被存储为两个连续整数,但可能存在LSB问题…我应用了公共uint32[]seq\u number,但问题依然存在same@kamal:请编辑您的帖子,并注明您收到的确切错误以及产生该错误的代码。
        [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;
        }