Из вашего вопроса неясно, полностью ли вы понимаете свойство Pack атрибута StructLayout. См. MSDN статьи для получения дополнительной информации.
Если я вас правильно понимаю, вам нужна возможность явно выравнивать каждый член структуры по отдельности. Если это ваша цель, вы можете сделать это с помощью атрибутов StructLayout и FieldOffset следующим образом:
[StructLayout(LayoutKind.Explicit)]
public struct Message
{
[FieldOffset(0)]
public int a;
[FieldOffset(4)]
public short b;
[FieldOffset(6)]
public int c;
[FieldOffset(22)] //Leave some empty space just for the heck of it.
public DateTime dt;
}
Остерегайтесь, однако, что у .NET CF Marshaler есть некоторые правила, которые вы можете не ожидать. Например, массивы всегда должны быть выровнены по 4-байтовым границам. Для этой проблемы есть обходных путей , но вы должны знать, что подобные проблемы могут возникать.