我想将 float[] 传递给 C 方法。C 签名如下所示:
EXTERN int process_raw(float *inBuffer, float *outBuffer);
在 C# 中,签名是:
public static extern int process_raw(ref float inBuffer, ref float outBuffer);
将带有 ref 的数组传递给第一个成员会不会有问题:
process_raw(ref someArray[0], ref anotherArray[0])
谢谢!
编辑:当然,了解 C 代码对浮点数的作用很重要:它将它们视为数组,并从 inBuffer 读取值并将值写入 outBuffer。如下所述,问题是在 PInvoke 调用期间是否会固定整个内存?
编辑2:另一条评论。我故意选择了 ref 浮动,因为我也想做一些事情,比如:
fixed(byte* outBuff = buffer)
{
Process(ticks, ref aFloat, ref ((float*)outBuff)[0]);
}
在这种情况下应该没问题,因为无论如何指针都是固定的,但是上面的普通数组的问题仍然存在。