我在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];
}
} ;
答案 0 :(得分:2)
问题在于:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public byte unit_code;
这是一个单字节,并不作为一个by-val数组。 I1
可以正常使用。