C++ 在cpp文件中包含可执行文件

C++ 在cpp文件中包含可执行文件,c++,windows,eclipse,C++,Windows,Eclipse,我一直在开发一个程序,通过测试,我发现我可能需要包含一个辅助可执行文件才能与该程序一起运行,这不是一个包含的程序,而是我编写的一个程序,我在谷歌和这里搜索过,但是,没有文档。我使用Eclipse作为我的IDE,所以我不能使用任何Visual Studio工具。 这是一个基于windows的应用程序。这更多是安装程序或特定于平台的可执行文件格式的问题 您应该使用操作系统API来执行辅助程序 我建议将辅助程序与可执行文件和其他库一起打包。这可以通过使用安装程序实用程序(特定于平台)来执行 将数据放入

我一直在开发一个程序,通过测试,我发现我可能需要包含一个辅助可执行文件才能与该程序一起运行,这不是一个包含的程序,而是我编写的一个程序,我在谷歌和这里搜索过,但是,没有文档。我使用Eclipse作为我的IDE,所以我不能使用任何Visual Studio工具。
这是一个基于windows的应用程序。

这更多是安装程序或特定于平台的可执行文件格式的问题

您应该使用操作系统API来执行辅助程序

我建议将辅助程序与可执行文件和其他库一起打包。这可以通过使用安装程序实用程序(特定于平台)来执行

将数据放入可执行文件的范围不在标准C++语言的范围内。


我不能在可执行文件中使用代码,因为它使用while循环 它必须与我试图运行的代码并行运行

你的一个意想不到的反应。。。是什么阻止您将“辅助可执行文件”作为现有可执行文件中的线程运行


考虑:如果“次要可执行文件”代码被“打包”为“main()”(并且您拥有该代码),您可以简单地将“main”重命名为其他名称,可能是“foo()”,可能是“main2(int,char**)”,甚至是“次要可执行文件(int,char**)”

此语句启动并行运行的线程(t2)

如果必须同步其终止,请添加适当的联接


此辅助设备是否需要比原始设备更多的argv

因为argv只是一个字符串列表,所以可以将新的argv添加到参数列表中(以及文档中的说明,以及“用法”用户提示的更新等)



如果你的第二个可执行文件不是C++(NOR C),我想考虑的回落方法是从C++代码中的二次可执行文件中分叉或PONEN()。在*NIX上,第二个可执行文件将以管道接口的形式运行。

这是一个安装程序或平台特定可执行格式的问题。C++不知道什么是可执行文件。你这样做的方式取决于你的操作系统惯例。这个问题目前的形式无法回答。你需要更具体地说明你想做什么,以及你在使用什么平台。如果你编写了可执行文件,你大概可以访问它的代码。在这种情况下,为什么不直接使用它的代码呢?我不能在可执行文件中使用代码,因为它使用while循环进行操作,它必须与我试图运行的代码并行运行,这是Garrett Gutierrez comment建议的一种可能的方法。很好的解决方案!然而,我遇到了一个问题,MinGW不允许我使用thread编译,所以如果您有一个解决方法或替代类,请让我知道更新:我在Github上找到了工作头,它确实编译了!谢谢你的帮助,祝贺你。C++线程的一种替代方法可能是“POSIX线程”。@ Stutel080FY-C++(在Ubuntu 17.10上)使用“STD::To线”将无法链接,而没有构建命令,它也有“-LpToX”,这也需要“POSIX线程”。C++线程代码比POSIX方便得多,但两者都是实用的。
// rename secondary executable 'main' to 
void foo(int argc, char* argv[]) 
{
    // example for test purposes ... input echo
    std::cout<< "\n  " << argc;
    for (int i = 1; i<argc; ++i) std::cout << "  " << argv[i];
    std::cout << std::endl;

    // for test purposes - do something for 50 ms
    for (int i = 0; i < 5; ++i) {
        std::cout << "foo executing << "  " << i << std::flush;
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}
std::thread t2(foo, argc, argv); // pass both by value