[Solved][C++] Перенаправление консольного вывода из dll.
А она точно в консоль выводит?
Как именно она выводит в консоль? Если через WriteConsole, то оно в файл не перенаправится ни в каком виде.
Не знаю насчет всей dll, но там точно есть хотя бы несколько выводов через cout, которые я не вижу.
а оно не в stderr всё выводит, не?
по идее после этого рядом с твоей прогой откроется черное окно и туда должен будет пойти весь output.
есть черный ящик host_app.exe
к нему вы написали длл1, которая тянет через delayLoad другую длл2
в длл1 вы смогли заредиректить stdout и cout в ней перехватываются
а что вы сделали во второй длл?
вы там пробовали сделать перехват stdout ?
попробуй вызвать в основном коде программы функцию создания консоли BOOL WINAPI AllocConsole(void);Не стесняйтесь пройти по ссылке. Я же написал, я это пробовал. Окно действительно появилось, но вывода там никакого не оказалось...
по идее после этого рядом с твоей прогой откроется черное окно и туда должен будет пойти весь output.
я так понял:Не совсем. host_app.exe тянет через delayLoad длл1, которая статически тянет длл2. Во второй длл не делал ничего, т.к. не имею к ней доступа. Но потоки, если я не ошибаюсь, должны быть едины для всего приложения и загруженных модулей в частности.
есть черный ящик host_app.exe
к нему вы написали длл1, которая тянет через delayLoad другую длл2
в длл1 вы смогли заредиректить stdout и cout в ней перехватываются
а что вы сделали во второй длл?
вы там пробовали сделать перехват stdout ?
Но потоки, если я не ошибаюсь, должны быть едины для всего приложения и загруженных модулей в частности.я не уверен в этом
вот из гугла: http://objectmix.com/smalltalk/182835-how-catch-stdout-exter...
может, вам пригодится
этот ответ на stackoverflow разъясняет ситуацию. Проблема в том, что в обеих библиотеках стоит опция "Use MFC in a Static Library", а потоки являются частью MFC, что приводит к тому, что они фактически разные для этих библиотек. Если поставить "Use MFC in a Shared dll", все работает. Проблема только в том, что я не могу изменить эту опцию для другой библиотеки! Так что вопрос пока открыт.
Вот а что нибудь с другой библиотекой делать можешь?
можешь, например, свой код добавить?
host_app.exe <- plugin.dll <- our_logic.dll <- vendor.dll
Если в our_logic.dll я еще могу что-то поправить, то в vendor.dll уж точно ничего. А из нее выводятся сообщения об ошибках. И вот до них-то я пока никак не смог добраться, независимо от настроек CRT и MFC.
А из нее выводятся сообщения об ошибкахмогу посоветовать вытащить логику в отдельный процесс. его аутпут можно зацепить
могу посоветовать вытащить логику в отдельный процесс. его аутпут можно зацепитьДа, вероятно, будет работать. Хотя понятно, что не хотелось бы прибегать к таким ухищренияем.
Решение пришло неожиданно: смог отыскать в vendor.dll интерфейсные функции переопределения потоков
Так что можно считать, что проблема закрыта. Всем спасибо.
смог отыскать в vendor.dll интерфейсные функции переопределения потоковпрокачанные чуваки написали
Оставить комментарий
Serpent555
Есть написанная на C++ библиотека. Она что-то выводит в консоль. Я ее подключаю к написанному на MFC приложению и хочу иметь доступ к этому выводу. Странно, но у меня никак не получается это сделать. Подробности на stackoverflow.