pipes
Проблема: если пользоваться _popen() для консольной программы все работает замечательно, как только используется то же самое в gui возникают ошибки, _popen() не возвращает хэндла.
В документации не говорится о каких бы то ни было ограничениях на использовние. Может следует воспользоваться какой-нибудь другой функцией? Или же что-то неправильного в моем коде?
child.exe - печатает строку текста и ждет нажатия любой клавиши для завершения
Цитата:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
AnsiString buf;
FILE* handle; // handle to one end of pipe
char message[5]; // buffer for text passed through pipe
// open a pipe to receive text from a process running "DIR"
handle = _popen("child.exe", "rt");
// в этой точке дебаг показывает handle = NULL
if (handle == NULL)
{
this->Memo1->Lines->Add("_popen error");
return;
}
// read and display input received from the child process
while (fgets(message, sizeof(message), handle))
{
buf.printf( message);
this->Memo1->Lines->Add(buf);
}
}
Цитата:
Originally posted by NinthBit
В документации не говорится о каких бы то ни было ограничениях на использовние. Может следует воспользоваться какой-нибудь другой функцией?
В документации не говорится о каких бы то ни было ограничениях на использовние. Может следует воспользоваться какой-нибудь другой функцией?
Я не знаю какой документацией пользуешься ты - но в моей сказанно четко и однозначно:
Цитата:
The _popen function returns an invalid file handle, if used in a Windows program, that will cause the program to hang indefinitely. _popen works properly in a Console application. To create a Windows application that redirects input and output, read the section "Creating a Child Process with Redirected Input and Output" in the Win32 SDK.
В вольном переводе с буржуйского - не используйте эту функцию в виндоус-программах, а используйте для этих целей другие CreatePipe,CreateProcess. Хотя конечно можно не считать это "ограничением на использование".
P.S.:
Документация к BCB 6.0 прямо в статье про _popen() у меня, я еще раз проверил, ничего про это не сказано.
Цитата:
Originally posted by NinthBit
Спасибо огромное!
P.S.:
Документация к BCB 6.0 прямо в статье про _popen() у меня, я еще раз проверил, ничего про это не сказано.
Спасибо огромное!
P.S.:
Документация к BCB 6.0 прямо в статье про _popen() у меня, я еще раз проверил, ничего про это не сказано.
В билдеровском хелпе просто сказано - для этих функций нет эквивалента в Win32.