Не существует документированного способа определения макета управляемой структуры.JIT-компилятор легко использует это преимущество, он переупорядочивает поля структуры, чтобы получить наилучшую упаковку.Маршалинг * всегда требуется для получения предсказуемого макета, как указано в атрибуте [StructLayout]
.Вы должны прыгнуть через обруч Marshal.StructureToPtr()
.Делаете ли вы это сами или позвольте маршаллеру pinvoke сделать это за вас.
Marshal.SizeOf(Type)
дает вам размер маршалла struct
Более подробную информацию о том, как это работает, можно найти в этом ответе .