Множество структур Маршалла

Я потратил много времени на поиск решения, но все еще не нашел его.

У меня есть 2 класса:

[StructLayout(LayoutKind.Sequential)]
public class Result
{
    public int Number;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
    public string Name;
    public int Size;
}

[StructLayout(LayoutKind.Sequential)]
public class CoverObject
{
    public int NumOfResults;
    [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 4)]
    public Result[] Results;
}

Мое ожидание, что команда Marshal.SizeOf(typeof(CoverObject)) вернет 52, но не, это всего лишь 20. Таким образом, все маршалл и unmarshall, которые я использую позже, не работают.

Похоже, что он только считает первый член (число) в классе результата. Я сделал что-то не так?

Ответ 1

Измените классы на структуры

[StructLayout(LayoutKind.Sequential)]
public struct Result
{
    public int Number;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
    public string Name;
    public int Size;
}

[StructLayout(LayoutKind.Sequential)]
public struct CoverObject
{
    public int NumOfResults;
    [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 4)]
    public Result[] Results;
}

где-то еще:

Marshal.SizeOf(typeof(CoverObject)) // it will return 52