[C#] PInvokeでマネージバイト[]配列を渡してWin32で記入する際には、ピンで固定する必要がありますか?


Answers

msdn 型の配列の整列によると、参照によって渡された配列だけがアンマネージコードによって書き込まれる可能性があります。 したがって、アンマネージ側でそれを埋める場合は、配列パラメータ[out]または[in、out]を宣言する必要があるようです。

このページhttp://msdn.microsoft.com/en-us/library/aa719896(VS.71).aspxでは、コール中にマーシャラが配列を管理対象から非管理対象にピンで固定すると明示的に言わずに、マーシャルがピン止めしていないと、それが説明していることの多くはうまくいかないでしょう。

Question

バイト配列を埋めるWin32関数を呼び出しているとします。 空の配列32を作成します。 次に、Win32関数に渡してintに入力し、後でマネージコードで使用します。 バイト配列が、割り当てられた時刻からWin32関数によって埋められるまでの間に移動または上書きされる可能性はありますか?