Как я могу объявить массивы в структуре? - PullRequest
7 голосов
/ 08 ноября 2010

Как я могу объявить структуру с массивом фиксированного размера в ней?

Я нашел решение, но оно работает только для примитивных типов данных. Мне нужен мой массив типа MyStruct.

Итак, как я могу объявить структуру с массивом других структур в ней?

отл.

    unsafe struct Struct1{
      fixed int arrayInt[100]; // works properly 
      fixed Struct2 arrayStruct[100]; //not compile
    }

Ответы [ 3 ]

9 голосов
/ 10 ноября 2010

Мой коллега нашел способ сделать это. Я думаю, что это правильный путь.

    [StructLayout(LayoutKind.Sequential)]
     public struct Struct1
     {
           [MarshalAs(UnmanagedType.ByValArray, SizeConst = sizeOfarray)]
           private Struct2[] arrayStruct;
     }
5 голосов
/ 08 ноября 2010

Вы не можете.Фиксированные массивы ограничиваются значениями типа bool, byte, char, short, int, long, sbyte, ushort, uint, ulong, float или double.

См. http://msdn.microsoft.com/en-us/library/zycewsya%28v=VS.80%29.aspx

Один подход к выполнениюВаше взаимодействие может заключаться в кодировании сборки-оболочки в C ++, которая переводит в более дружественную для C # структуру.

0 голосов
/ 08 ноября 2010

Вы не можете использовать пользовательские типы с фиксированными массивами. (Подробнее см. Ответ TTonis.)

Вместо того, чтобы пытаться создать структуру в C # с определенной разметкой памяти, я думаю, что вы должны использовать атрибут MarshalAs, чтобы указать, как следует распределять элементы. Даже если вам удастся получить элементы, которые занимают нужное количество памяти, у вас все равно есть отступы между элементами, что вызывает проблемы с выравниванием.

Вы можете иметь ссылку на обычный массив в структуре и указать, что он должен маршалироваться как ByValArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...