封送C++;将具有固定大小数组的结构转换为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
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文档说默认情况下结构是按布局顺序排列的,这就是为什么我认为应该可以。好的,明白了。你有没有试着用拜瓦尔来封送它?