无法编组结构的字段

时间:2018-03-28 10:01:51

标签: c#

我在dll中有一个以下类型的结构。但是当我调试它时,我得到以下异常。请帮助解决这个问题。

  

无法编组'RCMMMResult_S'类型的字段'id':类型定义   此字段具有布局信息但具有无效   托管/非托管类型组合或是不可编组的。

[StructLayout(LayoutKind.Sequential)]
public struct RCMMMResult_S
{

    public RCMMMResultID_s id;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    public byte[] value;
   // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
    public byte status;

    public RCMMMResult_S(bool init = true)
    {

        id = new RCMMMResultID_s();
        value = new byte[4];
        status = 0;
    }
} ;
[StructLayout(LayoutKind.Sequential, Pack = 1)]
[Serializable]
public struct RCMMMResultID_s
{

    [MarshalAs(UnmanagedType.I1, SizeConst = 1)]
    public byte analyte_id;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
    public byte unit_code;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
    public byte[] variant;
    public RCMMMResultID_s(bool init = true)
    {
        analyte_id = 0;
        unit_code = 0;
        variant = new byte[2];
    }
} ;

1 个答案:

答案 0 :(得分:2)

问题在于:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public byte unit_code;

这是一个单字节,并不作为一个by-val数组。 I1可以正常使用。