Как получить базовый stdio FILE * управляемого System.IO.FileStream? - PullRequest
0 голосов
/ 04 мая 2009

Я пишу адаптер .NET для библиотеки C / C ++, где метод "bar" принимает обычный stdio FILE *. Можно ли построить интерфейс, чтобы пользователь управляемого кода мог передавать управляемый (файловый) поток? Это без создания промежуточного буфера и кода для передачи данных между ними. Также делает предположение, что bar () read только улучшает ситуацию?

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}

Ответы [ 3 ]

5 голосов
/ 04 мая 2009

System.IO.FileStream.Handle

Это не обязательно stdio ручка. Это дескриптор Windows. Я не думаю, что FileStream построен на stdio, чтобы иметь stdio ручку.

Как отметил Марк и упомянул в ссылке MSDN, вы можете рассмотреть возможность использования свойства SafeFileHandle (если вы используете .NET 2.0+) вместо Handle (которое сейчас считается устаревшим). Только в старых версиях доступен Handle.

0 голосов
/ 04 мая 2009

Если вам нужен дескриптор stdio, вы всегда можете использовать fopen, чтобы открыть файл. В этом описывается оболочка для экспорта функций файла c stdlib, а затем он использует взаимодействие для работы с ними.

0 голосов
/ 04 мая 2009

Возможно ли построить интерфейс так что пользователь управляемого кода может передать управляемый (файл) поток?

Нет, невозможно преобразовать поток в дескриптор файла (FILE*).

...