Как получить базовый stdio FILE * управляемого System.IO.FileStream?
-
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 функции, а затем он использует взаимодействие для работы с ними.