一个解决方案,两个项目:如何从Windows应用程序调用控制台项目? C ++

时间:2012-10-19 14:29:39

标签: c++ visual-studio-2010 console-application projects-and-solutions windows-applications

使用Visual Studio 2010,使用C ++进行编码:

所以我有一个解决方案和两个项目:Project 1是一个Windows应用程序,用作程序的GUI,而Project 2是一个控制台应用程序,旨在与一些外部应用程序进行交互。

我想在Project 1中创建一个按钮,当按下它时执行Project 2.最简单的方法是什么?我想通过命令提示符运行Project 2并使用“system(”Project2.exe“);”方法,但我不知道如何引用项目可执行文件而不是外部已存在的可执行文件。

我对C ++和Visual Studio一般都很陌生,所以我可能会遗漏一些明显的东西,抱歉。谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

如果你想要运行另一个程序(甚至是你从上次旅行到月球的其他项目或一些不相关的执行)你现在应该是绝对或相对形式的其他项目的路径,或者它应该在路径中

因此,在您的系统中,您知道路径,您可以在源文件中对其进行硬编码,例如system( "C:\\path\\to\\my\\application.exe" )system( "..\\project2\\output.exe")

在另一个系统中,您有3个选项:

  • project2.exe添加到PATH,方法是将其添加到系统PATH的路径,或将其复制到已在system路径中的文件夹中文件夹

  • 使用安装程序将其复制到预定义文件夹(通常是相对于project1.exe),例如在同一文件夹中或..\\server\\project2.exe

  • 创建一个配置文件,用户可以在其中放置project2.exe的可执行文件路径

答案 1 :(得分:0)

您可以将项目2更改为构建为类库,这样您就可以在项目1中使用该dll吗?

答案 2 :(得分:0)

我认为迈克说的是更好的方式,但我想你会在这里遇到同样的问题。您必须定义“项目依赖项”。右键单击项目1 - >项目依赖关系 - >选择项目2.现在项目2在项目1之前编译。(如果您决定采用这种方式,则必须对库执行相同的操作)。

如果要在编译后移动文件,可以在属性中定义后期构建事件。 (配置属性 - >构建事件 - >构建后事件)您可以通过定义例如xcopy /y "$(ProjectDir)Release/myexe.exe" "Some path"

之类的命令来复制文件

答案 3 :(得分:0)

除了Mike Corcoran所提到的,如果你将它放入系统的PATH变量然后由system(const char *)函数执行

,你也可以使用任何外部程序。

以这种方式驾驶是可以接受的,但这不是正确的方法。例如,如果您的程序是交互式的,它将立即失败或具有UB(未定义的行为)。为避免这种情况,请将程序逻辑与输入/输出分开,并在代码中绕过它。

一些成功的Linux程序已设法获取控制台应用程序的输出并将其显示在GUI上(让您在内部与其进行交互)。即使Visual Studio也这样做 - 您在编译应用程序时看到的输出(例如“成功构建”等)在命令行中执行,然后重定向它的输出。

祝你好运。