はまったのでメモ。
C#からCに渡す構造体を
[StructLayout(LayoutKind.Sequential)] class Fuga { public int a; }
こんなふうに書いてうまくいってたからstructじゃなくてclassでいいんだっけ?と思いつつも使ってたけど、
[StructLayout(LayoutKind.Sequential)] class Hoge { [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 1)] public Fuga[] fuga = { new Fuga() }; public int b; }
こういうのを書いたらバイト配列にしたときゴミが入った。
Fugaの定義をclassからstructにした場合はちゃんと動くからやっぱ参照型だとだめなのね。