2016-09-24 3 views
0

У меня есть консольное приложение app.exe, которое я хочу вызвать из C++-программы, а затем общаюсь с ним, как если бы это была командная строка. По сути, я хочу сделать обертку C++ вокруг другого консольного приложения, чтобы я мог передавать его по своему желанию и получать вывод.Вызов консольного приложения из C++-программы

В псевдо-код что-то вроде:

std:string input("...some parameters..."), output; 
Process app("app.exe"); 
app.InputOutput(input, output); 
std::cout<<output; 

Это, должно быть, был дан ответ уже, но я, кажется, не хватает надлежащей терминологии, чтобы посмотреть его.

В случае это особенно важно, я бегу Eclipse CDT на Windows 10 с GCC 5.3.0

EDIT: Мне нужно, чтобы иметь возможность повторно отправить некоторые значения «App.exe» и повторно получить ответ, а чем просто вызвать его с параметрами. Это необходимо для небольшого личного проекта, поэтому я не забочусь о том, чтобы он был специфичным для платформы.

+0

Терминология: попробуйте «windows C++ pipe stdout». Вы хотите создать процесс и перенаправить его stdout в канал. – jdigital

+0

[Этот код] (http://stackoverflow.com/a/10888698/886887) может дать вам полезную отправную точку. Он получает только выходной сигнал дочернего процесса (он не может отправлять входные данные), но он может быть изменен, чтобы сделать это, мы надеемся, очевидным образом. –

ответ

0

Я использовал this code в качестве отправной точки в диалоговом окне MFC, чтобы отображать выходные данные вызванного процесса. Это было довольно безболезненно, поскольку это хорошо документировано. Он говорит вам, почему он что-то делает. Он должен быть подходящим, поскольку вы работаете с платформой Windows. Но, как указывает Альф, кросс-платформу - это нечто другое.

0

Вы можете использовать функцию system для вызова команды оболочки (командной строки).

Эта команда может состоять в том, чтобы выполнить программу с необходимыми аргументами.

system возвращает код выхода процесса, но для других результатов прямой поддержки нет. Один простой способ получить доступ к выходу, для программы, которая просто выполняет задание и заканчивается, заключается в перенаправлении вывода программы в файл.

В противном случае вам понадобятся коммуникационные механизмы, такие как каналы или почтовые ящики Windows, которые не поддерживаются стандартной библиотекой C++, то есть вы попадаете в код, специфичный для платформы.