API C FILE * не является расширяемым. Таким образом, нет задокументированного способа обернуть System.IO.Stream ФАЙЛОМ *. Возможно, вы можете каким-то образом взломать ЭЛТ, хотя я сомневаюсь в этом, поскольку он может использовать глобальное состояние.
Упаковка ФАЙЛА * в System.IO.Stream должна быть простой. Просто реализуйте интерфейс Stream, который читает последовательность из ФАЙЛА *.
Если бы вы могли передать объект iostream в нативный интерфейс, ваша жизнь была бы проще. Возможно, вы можете изменить нативную часть (или попросить разработчика этой DLL) использовать интерфейс iostream (фактически streambuf) вместо FILE *.
РЕДАКТИРОВАТЬ: Существует хак, вы можете создать отдельный процесс, который запускает DLL и передает stdin / stdout в качестве объекта FILE * в собственный интерфейс. С другой стороны создайте канал и читайте / записывайте его через System.IO.Stream.
РЕДАКТИРОВАТЬ 2: Это можно сделать без создания нового процесса.