Re[13]: Console - опять проблемы
От: Sasparella США  
Дата: 26.11.01 12:27
Оценка:
Здравствуйте Digger, Вы писали:

D>Здравствуйте Sasparella, Вы писали:


D>...


D>Работаю над аналогичной задачей (поподание в копейку %), хотелось бы пообщаться поподробней, могу поделиться опытом, уже кое какой набрался.


С удовольствием!! давай e-mail — ну, чтоб форум не засорять )
(в профайле у тебя его нет )

Саша.
Re[11]: Console - че-то застрял :(
От: Sasparella США  
Дата: 26.11.01 12:32
Оценка:
Здравствуйте retalik, Вы писали:


R>Ну, есть еще решение, работало еще с досовских (и юниксовых) времен: старые добрые dup и dup2.

R>В MSDN для них даже пример есть: перенаправляется собственный вывод в файл. Для пайпов, наверное, тоже сойдет.


Угу, я вначале тоже подумал об этом — но там проблема — как переводить handle (который int) в HANDLE который у windows.

А то там даже прямо функция редиректа есть — правда она принимает указатель на ИМЯ файла, а вот как ей подсунуть виндузовый хендл уже открытого — непонятно.

В лучшем случае — можно рассчитывать на структуру FILE — да и то там помучаться надо чтобы с виндой его подружить....

Или я ошибаюсь?


Саша.
Re[10]: Console - че-то застрял :(
От: Sasparella США  
Дата: 29.05.02 18:01
Оценка:
Продолжение.

Краткое содержание предыдущих серий:

имеем 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...

К чему я это?
Просто интересно, в чем грабли. Может у кого возникнет идея как с этим быть.
Чисто из спортивного интереса )


Саша.
Re[11]: Console - че-то застрял :(
От: SergH Россия  
Дата: 30.05.02 10:55
Оценка:
Здравствуйте Sasparella, Вы писали:

Здесь
Автор: SergH
Дата: 09.05.02
— мой аналогичный вопрос, а в конце результаты. Кстати, в той ветке есть ссылка на эту...

Теперь некоторые (возможно, неверные, опытов не ставил) соображения:

Если у DLL своя версия CRT (т.е. она слинкована статически) по-моему должно работать в любом случае, надо только SetStdHandle вызвать до загрузки DLL. Если и DLL и EXE используют одну CRT, переинициализация не произойдёт, работать не будет. Но это случай разрешимый, в моей ветке он и описан.
Делай что должно, и будь что будет
Re[12]: Console - че-то застрял :(
От: SergH Россия  
Дата: 30.05.02 11:00
Оценка:
Здравствуйте SergH, Вы писали:

SH>Кстати, в той ветке есть ссылка на эту...


Ошибся. Ссылка была где-то в другом месте.
Делай что должно, и будь что будет
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.