C# コードからの C DLL 関数の呼び出しに問題があります。C DLL には、ファイル名 ( ) を受け入れる関数const char *
があり、ファイルを開き、コンテンツに対して何らかの作業を実行し ( を読み取ってFILE *
)、結果を別のファイルに書き込みます。C# アプリのメモリ ストリームで既に処理するファイルがあるため、ディスクの読み取り/書き込み操作が実行されないように最適化したいと思います。両端 (C# アプリと C DLL) を自由に変更できます。C# アプリは .NET 2.0 ベースです。
DLL を拡張して、バイト配列を受け入れて吐き出す機能を持たせ、簡単にできるようにすることをPInvoke
考えました。出力部分は C 側では簡単に見えます - に書き込む代わりにFILE *
、連続するバイトを配列に保存するだけで済みます - しかし、入力は難しいようです。取得したバイト配列を C 側で処理してメモリ ストリームにし、代わりにこの時点から物理ファイル ストリームで作業する方法がわかりません (DLL 全体を読み書きするのは嫌です)。代わりにバイト配列からFILE *
- ラップしてイン/アウトを微調整するためだけに、ほとんどの DLL 内部を変更しないままにしておきたい)。しかし、実際にはわかりません。おそらくそれを行うためのより良いアイデアがあります。
問題は、C のバイト配列を(FILE *)
実際にディスクに書き込み、a を開いてFILE *
このファイルを読み取る
ことなく、バイト配列を a に変換する方法です。別の方法: C# から C DLL にメモリ ストリームを渡してPInvoke
、C 側で簡単に認識し、FILE *
(物理ディスクの書き込み/読み取りなしで、インメモリのみで) として操作できるようにする方法は?