将固定大小数组的C ++结构编组到C#中

时间:2014-07-02 18:49:51

标签: c# arrays mono marshalling fixed-width

我有一个像这样声明的C#结构:

public struct AdvertisementData {
    public byte SomeId;
    [MarshalAs(UnmanagedType.LPArray , SizeConst = 12)]
    public byte[] AnArray;
  }

它是C ++的对手:

struct AdvertisementData {
  uint8_t SomeId;
  uint8_t AnArray[12];
};

当我尝试将上述结构的堆栈分配实例的引用从C ++发送到C#时,我得到:"类型为Byte []的结构字段无法编组为LPArray。 #34; 知道我做错了吗?

1 个答案:

答案 0 :(得分:4)

尝试将其编组为ByValArray:

 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
  public byte[] AnArray;

而且,您确定不需要为结构设置任何LayoutKind吗?