マネージSystem.IO.FileStreamの基になるstdio FILE *を取得する方法は?
-
03-07-2019 - |
質問
「バー」メソッドが使用されるC / C ++ライブラリ用の.NETアダプタを記述しています。通常のstdio FILE *を取ります。マネージコードユーザーがマネージ(ファイル)ストリームを渡すことができるようにインターフェイスを構築することは可能ですか?それは、データをパイプするための中間バッファとコードを作成することなしです。また、bar()を読み取るという仮定は物事をより良くするだけですか?
// native code
void bar(FILE*);
// interface for managed code
void foo(System::IO::FileStream^ file)
{
FILE* stdio_handle = ???;
bar(stdio_handle);
}
解決
必ずしも stdio
ハンドルではありません。 Windowsハンドルです。 stdio
が stdio
ハンドルを持つために FileStream
が stdio
上に構築されているとは思わない。
MarcがMSDNリンクで指摘し、言及したように、 Handle
(.NET 2.0+を使用している場合)現在は時代遅れと見なされています)。ただし、古いバージョンでは Handle
のみが使用可能です。
他のヒント
インターフェースを構築することは可能ですか マネージコードユーザーが 管理(ファイル)ストリーム?
いいえ、ストリームをファイル記述子( FILE
*)に変換することはできません。
stdioハンドルが必要な場合、最初からfopenを使用してファイルを開くことができます。 これは、c stdlibファイルをエクスポートするラッパーについて説明しています関数を作成し、interopを使用してそれらを操作します。
所属していません StackOverflow