Прототип функции C просто хочет указатель на буфер и размер буфера, то, что он ожидает увидеть внутри буфера, - это вопрос в $ 64K. Мое предположение / дикое предположение заключается в том, что это битовые биты в форме ByteArray. Итак ...
Полагаю, это нужно разбить на шаги ...
[не проверено, но я думаю, что общая идея обоснована]
* получить данные из вашего растрового изображения, возможно, в байтовый массив
* выделить неуправляемый буфер для хранения данных
* скопировать байтовый массив в буфер.
* Передайте указатель буфера на ваш C dll
* Освободите буфер, когда вы закончите
Вы можете выделить неуправляемый буфер, используя
IntPtr pnt = Marshal.AllocHGlobal(size);
и вы можете скопировать ваш байтовый массив, используя
Marshal.Copy(theByteArray, 0, pnt, theByteArray.Length);
Обратите внимание, потому что это неуправляемые данные, вы будете нести ответственность за их освобождение, когда закончите.
Marshal.FreeHGlobal(ptr)
Обратите внимание, как говорит @jeffamaphone, если у вас есть доступ к коду c, было бы гораздо лучше просто передать дескриптор растрового изображения.