Вам нужно будет широко использовать .net marshalling . Сначала вам нужно переопределить структуры C в вашем коде C #, а затем убедиться, что все правильно выполняется с использованием атрибута MarshalAs .
Если вам нужно передать указатель на структуру в C # обратно в функцию C, вы можете использовать функцию Marshal.StructToPtr .
Буферные массивы, при условии, что они определены как байты [], вы можете использовать следующую технику:
byte[] buffer = ...;
fixed(byte *pBuffer = buffer)
{
// do something with the pBuffer
}
Оператор fixed гарантирует, что буфер не будет перемещен в память сборщиком мусора, что делает указатель внутри оператора фиксированным или закрепленным.
Что касается многомерных массивов, то это зависит от базовой реализации C, вы можете, например, работать с указателем на массив и корректировать позицию на основе количества измерений и количества элементов в каждом измерении, например:
someValue = buffer[(elementsPerDimensions * x) + y];
Из вашего описания это уже кажется довольно сложным, вы рассматривали вопрос о том, чтобы сделать вашу библиотеку удобной для COM?