system.io.stream <-> собственный C ++ FILE * - PullRequest
0 голосов
/ 09 октября 2011

Я получил DLL (C ++ native), для которой требуется параметр FILE *, поскольку он использует такие операции, как fwrite.Я не хочу экспортировать сгенерированные данные в файл, но в .NET CLR System.IO.Stream (это веб-приложение, и я хочу использовать HttpContext.Response.OutputStream)

Я началс использованием stdout и попыткой связать его дальше с outputtream, но это создает некоторые проблемы, и я боюсь, что он не будет работать хорошо, когда он многопоточный ... (есть только один стандартный вывод).

IЯ ищу эту проблему несколько дней и, похоже, не могу найти хорошего решения.

Спасибо,

Кристоф

1 Ответ

0 голосов
/ 09 октября 2011

API C FILE * не является расширяемым. Таким образом, нет задокументированного способа обернуть System.IO.Stream ФАЙЛОМ *. Возможно, вы можете каким-то образом взломать ЭЛТ, хотя я сомневаюсь в этом, поскольку он может использовать глобальное состояние.

Упаковка ФАЙЛА * в System.IO.Stream должна быть простой. Просто реализуйте интерфейс Stream, который читает последовательность из ФАЙЛА *.

Если бы вы могли передать объект iostream в нативный интерфейс, ваша жизнь была бы проще. Возможно, вы можете изменить нативную часть (или попросить разработчика этой DLL) использовать интерфейс iostream (фактически streambuf) вместо FILE *.

РЕДАКТИРОВАТЬ: Существует хак, вы можете создать отдельный процесс, который запускает DLL и передает stdin / stdout в качестве объекта FILE * в собственный интерфейс. С другой стороны создайте канал и читайте / записывайте его через System.IO.Stream.

РЕДАКТИРОВАТЬ 2: Это можно сделать без создания нового процесса.

...