0

メソッド "bar" が通常の stdio FILE* を取る C/C++ ライブラリ用の .NET アダプターを作成しています。マネージド コード ユーザーがマネージド (ファイル) ストリームを渡すことができるようにインターフェイスを構築することは可能ですか? つまり、データをパイプするための中間バッファーとコードを作成する必要はありません。また、bar() が読み取りを行うという仮定は、物事をより良くするだけですか?

// native code
void bar(FILE*);

// interface for managed code
void foo(System::IO::FileStream^ file)
{
    FILE* stdio_handle = ???;

    bar(stdio_handle);
}
4

3 に答える 3

5

System.IO.FileStream.Handle

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

Marc が指摘し、MSDN リンクで言及したように、SafeFileHandleプロパティ (.NET 2.0 以降を使用している場合) の代わりにHandle(現在は廃止されたと見なされています) の使用を検討することをお勧めします。Handleただし、古いバージョンでのみ使用できます。

于 2009-05-04T08:30:42.793 に答える
0

stdio ハンドルが必要な場合は、いつでも最初に fopen を使用してファイルを開くことができます。これは、c stdlib ファイル関数をエクスポートするためのラッパーを記述し、相互運用機能を使用してそれらを操作します。

于 2009-05-04T14:59:55.260 に答える
0

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

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

于 2009-05-04T08:38:51.540 に答える