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コードがfloatで何をするかを知ることは重要です:それはそれらを配列として扱い、inBufferから値を読み取り、outBufferに値を書き込みます。以下で説明するように、問題は、PInvoke呼び出し中にメモリ全体が固定されるかどうかです。
編集2:別のコメント。次のようなこともしたかったので、意図的にreffloatを選択しました。
fixed(byte* outBuff = buffer)
{
Process(ticks, ref aFloat, ref ((float*)outBuff)[0]);
}
この場合、ポインタはとにかく固定されているので問題はありませんが、上記のような通常の配列の問題は残ります。