2011-11-25 2 views
2

네이티브 DLL을 호출하는 C# 응용 프로그램이 있습니다. 네이티브 DLL은 AllocConsole을 호출하여 새 콘솔을 작성한 다음 WriteConsole을 작성하여 작성합니다. 디버거를 연결하지 않고 응용 프로그램을 실행하면이 동작이 제대로 작동합니다. 그러나 Visual Studio의 관리되는 디버거가 연결되어 실행될 때 AllocConsole이 호출 될 때 새 콘솔 창이 여전히 팝업되지만 WriteConsole을 호출하면 아무 것도 기록되지 않습니다.네이티브 DLL에서 WriteConsole 이벤트를 가로채는 C# 디버거

디버거가 콘솔 명령을 가로 채고 VS로 보내는 것처럼 보이지만 텍스트가 출력 (VS 출력) 또는 중급 (VS) 창에 나타나지 않습니다. 의도적으로 VS 창에 쓸 수 있습니다. OutputDebugString을 호출함으로써,하지만, 나는 현재 콘솔 라인을 덮어 쓰게 해주는 SetConsoleCursorPosition과 같은 함수를 사용하기 때문에, AllocConsole로 만들어진 콘솔에 쓸 수 있어야한다. 지금 당장 내 해결 방법은 다음과 같습니다.

if(debuggerAttached) OutputDebugString(...) else WriteConsole(...) 

어느 것이 상당히 세련되지 않고 원하는 기능을 제공하지 못합니다. VS 디버거가 C++ 콘솔 이벤트를 인터셉트하지 못하게하는 방법에 대한 아이디어가 있습니까? 순전히 네이티브 환경에있을 때이 문제가 발생하지 않습니다.

답변

0

콘솔에 글을 쓰기 전에이 코드를 사용해보십시오.

//AllocConsole() is called 
StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput()); 
standardOutput.AutoFlush = true; 
Console.SetOut(standardOutput); 

Here

은, 위의 코드를 설명하는 대답은, 또한 당신에게 유용 할 수 있습니다 내가 최근 묻는 질문이있다.

+0

불행히도 이것은 효과가있는 것 같지 않지만 계속 실험 할 것입니다. 관리되는 디버거가 다른 콘솔에 자동으로 연결될 경우를 대비하여 FreeConsole()을 먼저 호출 해 보았습니다. 그러나이 문제도 해결되지 않습니다. –

관련 문제