2017-11-20 34 views
1

アンマネージメモリをメモリマップファイルに転送する方法はありますか?アンマネージメモリを先にマーシャリングする必要はありませんか?アンマネージバイト配列をメモリマップファイルに書き込む

デリゲートを介して私にリッピングされたPDFデータを提供するAPIを使用しています。 IntPtrがデータを指し示すのを取得し、それを使用してアンマネージドバイト配列をマネージバイト配列にマーシャリングします。私はその配列をメモリマップファイルに書き込みます。私はバイト配列の処理をしていません。私が行うことは、メモリマップファイルに配列を書き込んだり、後でそのファイルからデータを読み込んで、ワイヤを介して別のアプリケーション(.Netアプリケーションではない)に送信することです。

マーシャルなしでこれを行う方法はありますか?アンマネージデータを直接メモリマップファイルに書き込む方法はありますか?

private void Callback(IntPtr data, int length) 
{ 
    var buffer = new byte[ length ]; 
    Marshal.Copy(data, buffer, 0, length); 
    _memoryMappedViewStream.Write(buffer, 0, length); 
} 

答えて

0

最終的には、これはダウンに来る:あなたがに書き込むためのPDFコードのにポインタをを渡すことができますAPIがあります。そうであれば、メモリにマップされたファイルの管理されていないポインタを、ビューアクセッサ(CreateViewAccessor)と.SafeMemoryMappedViewHandle.AcquirePointer() - 他の APIへのポインタを手にして、中間。終了したらReleasePointer()に電話することを忘れないでください。

これが存在しない場合は、データを1回コピーする必要があります。これは何をしているのですか。私はMarshal.CopyではなくUnsafe.CopyBlockSystem.Runtime.CompilerServices.Unsafe)を使用するように誘惑されるかもしれませんが、私は同じことをやっていると思います。

+0

ええ、私はちょっと考えました。ありがとうMarc。 – WBuck

関連する問題