Опитвам се да създам обединение на множество структури. Имам проблем с една структура, която съдържа масив от друга структура.
[StructLayout(LayoutKind.Explicit)]
public struct FruitBasket
{
[MarshalAs(UnmanagedType.Struct)]
[FieldOffset(0)]
public Apples Apple;
[FieldOffset(0)]
public Grapes Grape;
[FieldOffset(0)]
public Oranges Orange;
}
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi, Size = 12)]
public struct Apples
{
public int Color;
public int Texture;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 15)]
public Types[] Type;
}
Ако използвам само структурите на Apple, маршалингът работи добре. Въпреки това, ако се опитам да направя нещо като;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi]
public class Buffet
{
public UInt32 NumMeats;
public UInt32 NumVeggies;
public FruitBasket NumFruits; //public Apples Apple; <-- works fine
}
Получавам следната грешка;
FruitBasket" от сборка "Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", тъй като съдържа обектно поле при отместване 0, което е неправилно подравнено или припокрито от необектно поле.
Grapes
иOranges
? Освен това какво еTypes
? - person IS4   schedule 13.08.2015