문제

나는 c#내에서 stdout/stderr로 출력하는 타사 기본 DLL의 출력을 리디렉션하려고합니다. stdout과 stderr의 출력은 로그 파일로 이동해야합니다.

내 아이디어는 다음과 같습니다 (두 스트림의 x2) :

  • 생성 AnonymousPipeserVerstream
  • 파이프 손잡이를 통해 얻습니다 _outServer.SafePipeHandle.DangerousGetHandle()
  • p/호출을 사용하십시오 setStDhandle 상기 손잡이와 함께
  • 생성 AnonymousPipeClientStream 서버 스트림에 연결되었습니다
  • 루프를 읽을 수있는 스레드를 만듭니다. AnonymousPipeClientStream 그리고 로거로 출력.
  • 주기적으로 전화하십시오 flushAnonymousPipeServerStream

그래서이 모든 것이 내 코드 내에서 잘 작동하는 것 같습니다. 제어가 기본 DLL로 전달 되 자마자 모든 것이 Stderr로 돌아갑니다! 필요하다면, 나는 기본 DLL에 디버그하고 무엇이 잘못되고 있는지 볼 수 있지만 ... 실제로는 그렇지 않기 때문에, 10 시간을 보내기 전에 어떤 아이디어가 있나요?

참고로 테스트 코드는 다음과 같습니다. http://pastebin.com/f3eda7c8. 흥미로운 것은 생성자의 58-89 행입니다. (나중에 오류 처리 등을 추가하겠습니다).

도움이 되었습니까?

해결책

솔루션 (물론)은 문제와 관련이 거의 없지만 해결했습니다. DLL은 MINGW에서 컴파일되었으며 MSVC 런타임이 사용한 핸들을 존중하지 않습니다.

다른 사람 이이 문제에 직면 할 경우 코드 및 솔루션을 남겨 두겠습니다.

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