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

时间:2018-04-05 17:59:41

标签: c++ windows eclipse

我一直在研究一个程序,通过测试我发现我可能需要包含一个辅助可执行程序来运行该程序,这不是一个包含的程序,但是我已经编写了一个,我搜索过谷歌以及此处,没有文档。我使用Eclipse作为我的IDE,所以我不能使用任何Visual Studios工具。 这是一个基于Windows的应用程序。

2 个答案:

答案 0 :(得分:0)

这是安装程序或平台特定可执行格式的问题。

您应该使用OS API来执行辅助程序。

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

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

答案 1 :(得分:0)

  

我无法使用可执行文件中的代码,因为它使用了while循环   操作,它必须与我试图运行的代码并行运行

您的意外回复...是什么阻止您运行'辅助可执行文件'作为现有可执行文件中的线程?

考虑:如果'辅助可执行文件'代码是打包的#39;作为' main()',(并且您有代码),您可以简单地重命名' main'或许其他东西,也许' foo()',也许' main2(int,char **)',甚至' secondary_executable(int,char **)& #39; ...

// 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));
    }
}

然后,在你的&#39; main&#39;的某个地方,你做了类似的事情(未经测试,未编译):

std::thread t2(foo, argc, argv); // pass both by value

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

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

这个辅助设备是否需要比原设备更多的argv?

由于argv只是一个字符串列表,因此您可以将新的argv添加到参数列表中(以及对文档的描述,以及对用户提示的更新,等等) 。)

如果您的辅助可执行文件不是C ++(也不是C),我认为要考虑的后退方法是从C ++代码中fork或popen()辅助可执行文件。在* nix上,辅助可执行文件将作为并行进程运行,具有管道接口。