フロート[]をCメソッドに渡したいと思います。 C署名は次のようになりますfloat []を参照floatとしてアンマネージドコードに渡すと良いアイデアですか?
EXTERN int process_raw(float *inBuffer, float *outBuffer);
C#で署名である:
public static extern int process_raw(ref float inBuffer, ref float outBuffer);
は、第1部材にREFと配列を渡すことは問題であろう。
process_raw(ref someArray[0], ref anotherArray[0])
おかげ!
EDIT:もちろん、Cコードが浮動小数点で何をするかを知ることは重要です。それは配列として扱い、inBufferから値を読み込み、値をoutBufferに書き込みます。以下で説明するように、PInvoke呼び出し中にメモリ全体が固定されるかどうかという疑問があります。
EDIT 2:もう1つのコメント。それは問題になりません。この場合、
fixed(byte* outBuff = buffer)
{
Process(ticks, ref aFloat, ref ((float*)outBuff)[0]);
}
ポインタがとにかく固定されているので、しかし、上記の遺跡として通常の配列のための質問:私は、私も同じようなことをやってみたかったので、目的の参照フロートを選びました。
"in"と "out"バッファのサイズを含めるようにAPIを再設計することを考慮する必要があります。特に、 "out"バッファのサイズが "in"バッファと異なる長さになる可能性がある場合。また、マーシャリングも容易になります。 –
この場合、そのメソッドは64サンプルを定義します。このようなサイズ引数を持つ他のメソッドがありますが、単純化のためにそれらを残しました。私の唯一の関心事はGCであり、メモリが固定されているかどうかです。 CコードはinBufferから64個の値を読み込み、outBufferに64個の値を書き込みます。 – thalm