Отладчик C #, перехватывающий события WriteConsole из собственной библиотеки DLL - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть приложение на C #, которое вызывает собственную DLL.Собственная DLL вызывает AllocConsole для создания новой консоли, а затем WriteConsole для записи в нее.Это нормально работает, когда приложение запускается без отладчика.Но когда он запускается с подключенным управляемым отладчиком Visual Studio, при вызове AllocConsole все равно появляется новое окно консоли, но при вызове WriteConsole в него ничего не записывается.

Может показаться, что отладчик перехватывает консолькоманд и отправки их в VS, но текст не появляется ни в одном окне VS, которое я вижу (Output или Intermediate.) Я могу преднамеренно записывать в окна VS, вызывая OutputDebugString, но я действительно хотел бы иметь возможность писатьна консоль, созданную с помощью AllocConsole, так как я использую функции, подобные SetConsoleCursorPosition, чтобы позволить мне перезаписать текущую строку консоли.На данный момент мой обходной путь - что-то вроде

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

, что довольно не элегантно и не дает мне функциональности, которую я хочу.Любые идеи о том, как заставить отладчик VS не перехватывать события консоли C ++?Эта проблема не возникает, когда я нахожусь в чисто родной среде.

1 Ответ

0 голосов
/ 25 ноября 2011

Попробуйте использовать этот фрагмент кода перед записью чего-либо на консоль.

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

Здесь - это вопрос, который я задал недавно, который может быть вам полезен, также есть ответ, объясняющий код выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...