マネージSystem.IO.FileStreamの基になるstdio FILE *を取得する方法は?

StackOverflow https://stackoverflow.com/questions/819268

  •  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);
}
役に立ちましたか?

解決

System.IO.FileStream。ハンドル

必ずしも stdio ハンドルではありません。 Windowsハンドルです。 stdio stdio ハンドルを持つために FileStream stdio 上に構築されているとは思わない。

MarcがMSDNリンクで指摘し、言及したように、 Handle (.NET 2.0+を使用している場合)現在は時代遅れと見なされています)。ただし、古いバージョンでは Handle のみが使用可能です。

他のヒント

  

インターフェースを構築することは可能ですか   マネージコードユーザーが   管理(ファイル)ストリーム?

いいえ、ストリームをファイル記述子( FILE *)に変換することはできません。

stdioハンドルが必要な場合、最初からfopenを使用してファイルを開くことができます。 これは、c stdlibファイルをエクスポートするラッパーについて説明しています関数を作成し、interopを使用してそれらを操作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top