Выделение неизвестного размера массива - PullRequest
7 голосов
/ 06 августа 2009

У вас есть структура, которая принимает байтовый массив

byte[]

однако размер этого массива зависит от изображения, которое вы отправляете (widthxheight)

Итак ... как поживаете

[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;

Должен ли sizeconst ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ при работе с байтовыми массивами, передаваемыми из C # в Cll?

1 Ответ

2 голосов
/ 06 августа 2009

Вам необходимо изменить тип сортировки. SizeConst требуется, если вы выполняете маршалинг как ByValArray, но не с другими типами. Подробнее смотрите в перечислении UnmanagedType .

Я подозреваю, что вы хотите маршалировать как указатель C на массив:

[MarshalAs(UnmanagedType.LPArray)]

Это приведет к тому, что он будет перенаправлен в стандартный массив C (BYTE *), поэтому передается только указатель. Это позволяет вам передавать массив любого размера. Как правило, вы также захотите передать размер массива в качестве другого параметра (или ширины изображения / высоты / bpp, который предоставляет ту же информацию), поскольку в C / C ++ нет способа сказать это легко.

...