| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вывод консольного приложения в окно |
| Автор: Stik 12.10.2004, 13:15 |
| Вопрос следующий: моя программа вызывает консольное приложение, которое производит вспомогательное действие. Хотелось бы вывести результат работы консольного приложения в окно моей программы, как это сделано во многих IDE. 1. Не подскажите, каким образом можно этого добиться? 2. Зависит ли это от того, какой функцией я запускаю дочернее приложение или есть универсальный путь? Просто следующих функций запуска дочернего процесса: CreateProcess, ShellExecute, shell, _spawnl мне подходит только _spawnl (в других мне просто не удалось получить код возврата ---- Спасибо! |
| Автор: chipset 12.10.2004, 13:43 |
| Не знаю способов кроме CreateProcess Поставь в STARTUPINFO для hStdOutput, хэндл pipe'а или файла (CreateFile) и синхронизься. |
| Автор: Stik 12.10.2004, 14:05 |
| А как получить код возврата приложения, запущенного CreateProcess'ом? |
| Автор: chipset 12.10.2004, 14:28 |
| Не знаю что ты подразумеваешь под кодом возврата. Примерно то же что int main() возвращает? |
| Автор: Stik 12.10.2004, 15:20 | ||
Именно. Внешнее приложение возвращает 0 при успешном завершении и положительное значение - при ошибке. И этот код ошибки мне необходим, чтобы вести лог и выводить описание ошибки на русском, так как внешнее приложение выводит только на английском. |
| Автор: Arush 12.10.2004, 16:28 |
| Я так понимаю что надо использовать GetExitCodeProcess: BOOL GetExitCodeProcess( HANDLE hProcess, LPDWORD lpExitCode); If the specified process has not terminated, the termination status returned is STILL_ACTIVE. If the process has terminated, the termination status returned may be one of the following: The exit value specified in the ExitProcess or TerminateProcess function. The return value from the main or WinMain function of the process. The exception value for an unhandled exception that caused the process to terminate. С учетом следующего: Warning If a process happens to return STILL_ACTIVE (259) as an error code, applications that test for this value could end up in an infinite loop. возможно имеет смысл при получении STILL_ACTIVE проверять работает ли программа другим методом. |
| Автор: Adil' 13.10.2004, 16:51 | ||
|