문제

메소드 "막대"가 일반 stdio 파일*을 취하는 C/C ++ 라이브러리에 대한 .NET 어댑터를 작성하고 있습니다. 관리 된 코드 사용자가 관리되는 (파일) 스트림을 전달할 수 있도록 인터페이스를 빌드 할 수 있습니까? 이는 중간 버퍼와 코드를 만들지 않고 데이터를 파이프합니다. 또한 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.Handle

반드시 그런 것은 아닙니다 stdio 핸들. Windows 핸들입니다. 나는 생각하지 않는다 FileStream 구축되었습니다 stdio a stdio 핸들.

MARC가 MSDN 링크에서 지적하고 언급했듯이 사용을 고려할 수 있습니다. SafeFileHandle 대신 속성 (.NET 2.0+에있는 경우) Handle (현재는 쓸모없는 것으로 간주됩니다). 뿐 Handle 그러나 이전 버전으로 제공됩니다.

다른 팁

관리 된 코드 사용자가 관리되는 (파일) 스트림을 전달할 수 있도록 인터페이스를 빌드 할 수 있습니까?

아니요, 스트림을 파일 디스크립터로 변환 할 수 없습니다 (FILE*).

stdio 핸들이 있어야하는 경우 항상 Fopen을 사용하여 파일을 처음 열 수 있습니다. 이것 C stdlib 파일 함수를 내보내는 래퍼를 설명하고 인터 로프를 사용하여 작업을 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top