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

Sal*_*rtz 3 c# arrays mono marshalling fixed-width

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

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

与C ++对应:

struct AdvertisementData {
  uint8_t SomeId;
  uint8_t AnArray[12];
};
Run Code Online (Sandbox Code Playgroud)

当我尝试将对上述结构的堆栈分配实例的引用从C ++发送到C#时,我得到:“ Byte []类型的结构字段不能编组为LPArray。” 知道我在做什么错吗?

Eug*_*kal 5

尝试将其封送为ByValArray:

 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
  public byte[] AnArray;
Run Code Online (Sandbox Code Playgroud)

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