あなたの質問からは、StructLayout 属性の Pack プロパティを完全に理解しているかどうかは明確ではありません。詳細については、この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 マーシャラーには予期しないルールがいくつかあることに注意してください。たとえば、配列は常に 4 バイト境界に揃える必要があります。この問題には回避策がありますが、このような問題が発生する可能性があることに注意してください。