Я пытаюсь маршалировать с C ++ на C # структуру, которая выглядит примерно так:
typedef struct FooStruct {
Uint8 bytesPerThingie;
void *arrayOfThingies;
// other members ...
}
Итак, в этом случае есть две неизвестные:
- Количество элементов в массиве.
- Размер (в байтах) каждого элемента.
Ранее я успешно маршалировал саму структуру с таким определением:
[StructLayout(LayoutKind.Sequential)]
public struct FooStruct {
public byte bytesPerThingie;
public IntPtr arrayOfThingies;
// other members...
}
но теперь мне нужно проверить и изменить встроенный массив.
Я это понимаю
- Сам по себе массив непреобразуемых элементов непреобразуемого типа является непреобразуемым, но не тогда, когда он используется в качестве поля в структуре.
- При маршалинге из неуправляемого кода в .NET Framework длина массива определяется аргументом SizeConst, за которым может следовать неуправляемый тип элементов массива, если они не являются непреобразуемыми.
Даже если предположить, что элементы в массиве в этом случае имеют непреобразуемый тип, как я могу установить SizeConst, аргумент времени компиляции, если я не могу знать размер массива до времени выполнения?
SizeConst
. Скорее всего, вам придется провести сортировку самостоятельно. - person David Heffernan   schedule 27.03.2012