powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение потока вывода программы, запущенной из процесса
4 сообщений из 4, страница 1 из 1
Получение потока вывода программы, запущенной из процесса
    #32737292
Kondu4ov Lex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток.
Сразу же прошу прощения, если эта тема уже обсуждалась... по поиску я не нашел ответа на форуме.

Итак, задача проста: программа (компилятор Delphi - dcc32.exe) запускается из процесса (созданного посредством функции CreateProcess, как вы понимаете). Компилятору передаются в строке запуска необходимые ключи и имя файла с исходным текстом на Паскале. Для получения информации о том, как прошла компиляция (были ли ошибки или все прошло удачно) в структуре STARTUPINFO флаг dwFlags устанавливается в STARTF_USESTDHANDLES и хеадеры файлов, которые будут использованы в качестве потоков ввода, вывода и ошибок, передаются в соответствующие поля этой же структуры. Приведу кусок исходного кода:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
HANDLE hInputStream = CreateFile("compiler_in.txt", GENERIC_READ, FILE_SHARE_READ, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  0 ); 

if (hInputStream == INVALID_HANDLE_VALUE) { 
   cout << "Error while creating compiler_in.txt file" << endl; 
   return GetLastError(); 
} 

HANDLE hOutputStream = CreateFile("compiler_out.txt", GENERIC_WRITE, FILE_SHARE_READ, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,  0 ); 

if (hOutputStream == INVALID_HANDLE_VALUE) { 
   cout << "Error while creating compiler_out.txt file" << endl; 
   return GetLastError(); 
} 

 // create process  
PROCESS_INFORMATION pi; 
STARTUPINFO si; 
ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
si.dwFlags = STARTF_USESTDHANDLES; 

 // setup handles  
si.hStdInput = hInputStream; 
si.hStdOutput = hOutputStream; 
si.hStdError = hOutputStream; 

BOOL b = CreateProcess( 0 , (char*)compilecmd,  0 ,  0 , false,  0 ,  0 ,  0 , &si, π);


После запуска программы компиляция исходника проходит успешно, необходимые файлы compiler_in.txt и compiler_out.txt создаются, но файл compiler_out.txt остается пуст, несмотря на то, что в нем должна быть информация о процессе компиляции: сколько строк откомпилировано и т.д. При этом, даже если в исходнике Паскаля намеренно допустить ошибку, чтобы компилятор начал ругаться, то это приводит лишь к тому, что exe-файла на выходе мы не получаем, а файл потока вывода/ошибки по-прежнему пуст.

Кто знает, в чем может быть проблема? Что я сделал неправильно?
______________
Gnothi seauton...
...
Рейтинг: 0 / 0
Получение потока вывода программы, запущенной из процесса
    #32737295
Kondu4ov Lex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в последней строчке кода просто опечатка. Конечно, там должно быть:
Код: plaintext
1.
BOOL b = CreateProcess( 0 , (char*)compilecmd,  0 ,  0 , false,  0 ,  0 ,  0 , &si, &pi);
______________
Gnothi seauton...
...
Рейтинг: 0 / 0
Получение потока вывода программы, запущенной из процесса
    #32737689
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msdnWindows 2000/XP: If CREATE_ALWAYS is specified as the value of the dwCreationDisposition parameter and FILE_ATTRIBUTE_NORMAL is specified as the value of the dwFlagsAndAttributes parameter, CreateFile will fail and set the error GetLastError reports to ACCESS_DENIED. In this case, set the value of the dwFlagsAndAttributes parameter to the ORed value of the FILE_ATTRIBUTE_HIDDEN and FILE_ATTRIBUTE_NORMAL attributes to avoid this error.

Оно?
...
Рейтинг: 0 / 0
Получение потока вывода программы, запущенной из процесса
    #32739433
Kondu4ov Lex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем, но в любом случае спасибо.
Я уже нашел ответ, нужно было изменить false на true в параметре bInheritHandles...
______________
Gnothi seauton...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение потока вывода программы, запущенной из процесса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]