Я думаю, что вам нужно добавить конструктор в Struct для создания экземпляров типов BBB и CCC, в свою очередь, в каждой из других структур BBB и CCC вам также понадобится конструктор для создания экземпляров типа DDD.
struct DDD
{
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 512, ArraySubType = UnmanagedType.I1)]
byte[] x;
}
struct BBB
{
DDD x;
public BBB(){
x = new DDD();
}
}
struct CCC
{
DDD x;
ulong y;
ulong z;
public CCC(){
x = new DDD();
}
}
[StructLayout(LayoutKind.Explicit)]
struct AAA
{
[FieldOffsetAttribute(0)]
BBB a;
[FieldOffsetAttribute(0)]
CCC b;
public AAA(){
a = new BBB();
b = new CCC();
}
}
Единственный улов в этом вопросе - создание экземпляра struct DDD, которая неизвестна, поскольку вы объявили поле x, которое является массивом byte [], а размер неизвестен, поэтому вы должны обращаться с ним на основе ваших собственных требований. , Может быть, передать параметр, возможно, int, указывающий размер массива ...
Надеюсь, это поможет вам,
С наилучшими пожеланиями,
Том.