私は、コールバック関数を公開するアンマネージドAPIを使って作業しています。この関数は、IntPtr
とバイト配列を表す整数を受け取ります。 APIは私にそれをデータで埋めることを期待しています。IntPtr +サイズからマネージバイト配列を作成することはできますか?
管理しているbyte[]
を使用して、そのバッファを埋めることができます。私は今のところそれをやってきた方法は、このようなものです:
public void MyCallback(IntPtr rawBufferPtr, int rawBufferLength)
{
var buffer = new byte[rawBufferLength];
<fill the buffer with whatever data I want>
Marshal.Copy(buffer, 0, rawBufferPtr, rawBufferLength);
}
それはMarshal.Copy
を避け、何とかrawBufferPtr
で直接データを保存するためにbyte[]
を割り当てることは可能ですか?
ブロックコピーを避けるための他のオプションはありますか?基本的に唯一の代替手段はbyte*
ですか?
あなたが明示的に危険なコードを書くことになります。明らかに、バイト*を使用してください。 –