Я пытаюсь создать объединение нескольких структур. У меня проблема с одной структурой, которая содержит массив другой структуры.
[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