Конечно, ответ должен использовать MVC и перемещение как можно больше логики из GUI.
Однако я получил известие от коллеги давным-давно, что, когда SGI портировал OpenGL на новые аппаратные средства, у них был набор модульных тестов, которые потянут ряд примитивов на экран, тогда вычисляют сумму MD5 кадрового буфера. Это значение могло тогда сравниться с известными хорошими значениями хэш-функции, чтобы быстро определить, ли API на точный пиксель.
Вам необходимо изменить тип маршалинга. 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 ++ нет возможности легко сказать это.