Маршалинг неизвестного размера Массива

Конечно, ответ должен использовать MVC и перемещение как можно больше логики из GUI.

Однако я получил известие от коллеги давным-давно, что, когда SGI портировал OpenGL на новые аппаратные средства, у них был набор модульных тестов, которые потянут ряд примитивов на экран, тогда вычисляют сумму MD5 кадрового буфера. Это значение могло тогда сравниться с известными хорошими значениями хэш-функции, чтобы быстро определить, ли API на точный пиксель.

8
задан Olewolfe 6 August 2009 в 16:30
поделиться

1 ответ

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

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

[MarshalAs(UnmanagedType.LPArray)]

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

посмотрите на перечисление UnmanagedType .

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

[MarshalAs(UnmanagedType.LPArray)]

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

посмотрите на перечисление UnmanagedType .

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

[MarshalAs(UnmanagedType.LPArray)]

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

3
ответ дан 6 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: