2011-10-09 56 views
0

我有一個DLL(C++天然的)這需要一個FILE *參數,因爲它使用的操作,如fwrite的。 我不想將生成的數據導出到文件,而是導出到.NET CLR System.IO.Stream(這是一個Web應用程序,我想使用HttpContext.Response.OutputStream)system.io.stream <->本地C++ FILE *

我開始於使用標準輸出,並試圖進一步鏈接到的OutputStream,但它提供了一些問題,我害怕時,它的多線程的,它不會很好地工作......(只有一個標準輸出)。

我尋找了幾天對於這個問題,似乎無法找到一個很好的sollution。

感謝,

克里斯托夫

+0

相關[打印到一個FILE *輸出例程可以被用來建立在C字符串?](http://stackoverflow.com/questions/1270212/can- output-routines-that-print-to-a-file-be-used-to-build-a-string-in-c) – Darcara

回答

0

C文件* API是不可擴展的。所以沒有文件記錄的方式來包裝一個FILE *的System.IO.Stream。也許你能以某種方式破解CRT,但我懷疑,因爲它可以使用全局狀態。

結束語一個FILE *與System.IO.Stream應該直截了當。只需實現從FILE *讀取序列的Stream接口。

如果你能傳遞一個iostream對象的原生界面你的生活會更容易些。也許你可以修改本地部分(或者請求這個DLL的開發者)使用iostream(實際上是streambuf)接口而不是FILE *。

編輯:有一個破解,你可以創建一個單獨的進程,運行該DLL並將作爲FILE *對象的stdin/stdout傳遞到本機接口。另一方面,通過System.IO.Stream創建一個管道並讀/寫它。

編輯2:It's possible to do this without creating a new process.

+0

感謝您的回覆。 - 修改DLL是不可能的:-( - 我想保持代碼儘可能正確 - 它必須是多線程就緒,這將失敗 在這一刻,我正在尋找一個本地的C++模塊。可以將WriteEntityChunk與FILE *一起使用,然後準備就緒。 – user982033

相關問題