Здравствуйте Digger, Вы писали:
D>Здравствуйте Sasparella, Вы писали:
D>...
D>Работаю над аналогичной задачей (поподание в копейку %), хотелось бы пообщаться поподробней, могу поделиться опытом, уже кое какой набрался.
С удовольствием!! давай e-mail — ну, чтоб форум не засорять
)
(в профайле у тебя его нет
)
Саша.
Продолжение.
Краткое содержание предыдущих серий:
имеем exe с внешним MFC, длл с внешним МFC.
В eхе перенаправляем стдаут в пайп, а оттуда в окошко.
Потом грузим длл.
Теперь из функциий длл можно писать в это окошко так
fprintf("text");
fflush(stdout); // без этого не получается - пишется все сразу по выгрузке длл.
или
cout << "text"<< endl;
cout.flush();
Работает сие счастье только в Debug версии dll. ( exe — любой).
В реилизе ничего не выводится.
Причем GetStdHandle(STD_OUTPUT_HANDLE) и в дебуг и в релиз возвращает одно и тоже.
Более того, такой вот вызов
DWORD dwWritten;
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),totaltext,strlen(totaltext),&dwWritten,NULL);
работает и в релиз версии.
Налицо проблемы с переконфигурацией стандартной библиотеки в dll...
К чему я это?
Просто интересно, в чем грабли. Может у кого возникнет идея как с этим быть.
Чисто из спортивного интереса
)
Саша.
Здравствуйте Sasparella, Вы писали:
ЗдесьАвтор: SergH
Дата: 09.05.02
— мой аналогичный вопрос, а в конце результаты. Кстати, в той ветке есть ссылка на эту...
Теперь некоторые (возможно, неверные, опытов не ставил) соображения:
Если у DLL своя версия CRT (т.е. она слинкована статически) по-моему должно работать в любом случае, надо только SetStdHandle вызвать до загрузки DLL. Если и DLL и EXE используют одну CRT, переинициализация не произойдёт, работать не будет. Но это случай разрешимый, в моей ветке он и описан.