封送C++;将具有固定大小数组的结构转换为C#

封送C++;将具有固定大小数组的结构转换为C#,c#,arrays,mono,marshalling,fixed-width,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]; }; 当我尝试将上面的St

我有一个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];
};
当我尝试将上面的Stutt的一个堆栈分配实例引用到C++中时,我得到:“Byth[]的结构域不能被编组成LPArray。
知道我做错了什么吗?

尝试将其封送为ByValArray:

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

另外,您确定不需要为结构设置任何设置吗?

您可以尝试使用
SafeArray
?mono interop文档说默认情况下结构是按布局顺序排列的,这就是为什么我认为应该可以。好的,明白了。你有没有试着用拜瓦尔来封送它?