Использование Visual Studio 2010, кодирование на C ++:
Итак, у меня есть решение и два проекта: Project 1 — это приложение Windows, предназначенное для работы в качестве графического интерфейса для программы, а Project 2 — консольное приложение, предназначенное для взаимодействия с некоторыми внешними приложениями.
Я хочу создать кнопку в Project 1, которая при нажатии запускает Project 2. Какой самый простой способ сделать это? Я имею в виду просто запустить Project 2 через командную строку с «system (» Project2.exe «);» такой подход, но я не знаю, как ссылаться на исполняемый файл проекта вместо внешнего, уже существующего исполняемого файла.
Я довольно новичок в C ++ и Visual Studio в целом, поэтому я могу упустить что-то очевидное здесь, извините. Спасибо за вашу помощь!
Если вы хотите запустить другую программу (даже ваш другой проект или какого-либо другого руководителя, которого вы получили от своего последнего путешествия на Луну), вы должны теперь указать путь к другому проекту в абсолютной или относительной форме, или он должен быть в пути.
Так что в вашей системе вы знаете путь, вы можете жестко закодировать его в вашем исходном файле, например system( "C:\\path\\to\\my\\application.exe" )
или же system( "..\\project2\\output.exe")
,
А в другой системе у вас есть 3 варианта:
Положить ваши project2.exe
в PATH
либо добавив свой путь к системе PATH
или скопируйте его в папку, которая уже находится в пути, как system
папка
С помощью установки скопируйте его в предопределенную папку (обычно относительно project1.exe
), например, в той же папке или ..\\server\\project2.exe
Создайте файл конфигурации, который пользователь может указать путь к исполняемому файлу project2.exe
в этом
Можете ли вы изменить проект 2, чтобы построить как библиотеку классов, так что вы можете просто использовать эту DLL в своем проекте 1?
Я думаю, что Майк сказал, что это лучший способ, но я думаю, вы столкнетесь с той же проблемой здесь. Вы должны определить «Зависимости проекта». Щелкните правой кнопкой мыши по проекту 1 -> Зависимости проекта -> Выберите проект 2. Теперь проект 2 компилируется перед проектом 1. (Вы должны сделать то же самое для библиотек, если решите пойти по этому пути).
Если вы хотите переместить файл после компиляции, вы можете определить событие после сборки в ваших свойствах. (Свойства конфигурации -> События сборки -> Событие после сборки) Там вы можете скопировать файл, определив, например, такую команду, как xcopy /y "$(ProjectDir)Release/myexe.exe" "Some path"
Помимо упомянутого Майком Коркораном, вы также можете использовать любую внешнюю программу, если вы поместите ее в системную переменную PATH, а затем выполните ее system(const char *)
функция
Управлять этим способом можно, но это не правильный путь. Например, если ваша программа была интерактивной, она мгновенно потерпела бы неудачу или имела бы UB (неопределенное поведение). Чтобы избежать этого, отделите логику программы от ввода / вывода и обойдите ее в своем коде.
Некоторым успешным программам для Linux удалось получить выходные данные консольного приложения и отобразить их в графическом интерфейсе (чтобы вы взаимодействовали с ним внутри системы). Даже Visual Studio делает это — вывод, который вы видите при компиляции ваших приложений, таких как «успешная сборка» и т. Д., Выполняется в командной строке, а затем вывод перенаправляется.
Удачи.