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

StackOverflow https://stackoverflow.com/questions/819268

  •  03-07-2019
  •  | 
  •  

Вопрос

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

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}
Это было полезно?

Решение

System.IO.FileStream. Ручка

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

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

Другие советы

  

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top