Неразрушимая ошибка в Blittable типе

У меня есть эта структура и этот код:

[StructLayout(LayoutKind.Sequential, Pack = 8)]
private class xvid_image_t
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    public int[] stride;

    // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    // public IntPtr[] plane;
}

public int decore()
{
    xvid_image_t myStruct = new xvid_image_t();
    myStruct.stride = new int[4]; // can be commented out - same result
    GCHandle.Alloc(myStruct, GCHandleType.Pinned);

    // ...
}

Когда я пытаюсь запустить его, я получаюArgumentException говоря:

Объект содержит непримитивные или неблизкие данные

После прочтенияэта страница MSDN поговорка

Следующие сложные типы также являются blittable типами:

Одномерные массивы blittable типов, такие как массив целых чисел. Тем не менее, тип, который содержит переменный массив blittable типов, сам не является blittable.

Типы форматированных значений, которые содержат только blittable типы (и классы, если они маршалируются как форматированные типы). Для получения дополнительной информации о форматированных типах значений см. Маршалинг по умолчанию для типов значений.

Я не понимаю, что я делаю не так. Я не просто хочу использоватьMarshal, но чтобы понять это тоже.

Так что я на самом деле хочу знать:

Почему?Как я могу решить это?Будет ли решение, которое вы предлагаете, работать с закомментированной строкой в структуре?

Я использую .Net 4.5, но также необходимо решение для .Net 2.0.

Ответы на вопрос(3)

Ваш ответ на вопрос