Я хотел бы передать float[] методу C. Сигнатура C выглядит как:
EXTERN int process_raw(float *inBuffer, float *outBuffer);
в C #сигнатура:
public static extern int process_raw(ref float inBuffer, ref float outBuffer);
будет ли проблематично передать массивы с рефом первому члену:
process_raw(ref someArray[0], ref anotherArray[0])
спасибо!
РЕДАКТИРОВАТЬ :Конечно, важно знать, что код C делает с числами с плавающей запятой. :Он будет обрабатывать их как массивы, считывать значения из inBuffer и записывать значения в outBuffer. Как обсуждается ниже, вопрос заключается в том, будет ли вся память закреплена во время вызова PInvoke?
РЕДАКТИРОВАТЬ 2 :Еще один комментарий. Я выбрал ref float специально, потому что я также хотел делать такие вещи, как :
fixed(byte* outBuff = buffer)
{
Process(ticks, ref aFloat, ref ((float*)outBuff)[0]);
}
. В этом случае это не должно быть проблемой, потому что указатель в любом случае фиксирован, но вопрос для нормального массива, как указано выше, остается.