C#アプリケーション内で古いCライブラリ(DLLとして構築)を使用しています。このライブラリの関数の1つは、FILE*
(ANSI Cで定義されているように)渡される必要があります。System.IO.File
、stdout
およびのFILE *ハンドルをC#で取得する方法はありstderr
ますか?
または、この問題、アイデア、ヒントなどを回避する方法はありますか?
前もって感謝します。
C#アプリケーション内で古いCライブラリ(DLLとして構築)を使用しています。このライブラリの関数の1つは、FILE*
(ANSI Cで定義されているように)渡される必要があります。System.IO.File
、stdout
およびのFILE *ハンドルをC#で取得する方法はありstderr
ますか?
または、この問題、アイデア、ヒントなどを回避する方法はありますか?
前もって感謝します。
私はこれを試していませんが、うまくいくかもしれません...
System.IO.File.Create()/ Open()はFileStreamを返し、そこからFileStream.SafeFileHandleを使用でき、そこからSafeFileHandle.DangerousGetHandle()がネイティブオペレーティングシステムHANDLEを提供します。
次に、アンマネージCでは、_open_osfhandle()がHANDLEを取得し、intファイル記述子を返します。これを_fdopen()に渡すと、FILE*が返されます。
非互換性やその他の落とし穴の機会がたくさんある長いルート。しかし、あなたは幸運かもしれません!