Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从程序中创建/运行.exe?(C+;+;) 是否可以(如果是,怎样)编写C++程序,它需要参数,然后从另一个C++程序运行该程序。_C++_Function_Parameters_Executable - Fatal编程技术网

如何从程序中创建/运行.exe?(C+;+;) 是否可以(如果是,怎样)编写C++程序,它需要参数,然后从另一个C++程序运行该程序。

如何从程序中创建/运行.exe?(C+;+;) 是否可以(如果是,怎样)编写C++程序,它需要参数,然后从另一个C++程序运行该程序。,c++,function,parameters,executable,C++,Function,Parameters,Executable,Ie:我可以创建一个添加两个数字的函数: int add(int a,int b){return a+b;} 是否可以做同样的事情,除了一个函数,一个单独的C++ +exe?< /p> 编辑:因为很多人不理解我的问题,我会尽量准确地说出我想知道怎么做 我想要一个程序,叫它“p1” 我希望该程序从用户那里获得两个数字: int x,y; cin>>x; cin>>y; 现在我想创建另一个程序,它接受两个数字,并将它们相加,就像函数一样,除了一个单独的程序 然后我想运行第

Ie:我可以创建一个添加两个数字的函数:

int add(int a,int b){return a+b;}

是否可以做同样的事情,除了一个函数,一个单独的C++ +exe?< /p> 编辑:因为很多人不理解我的问题,我会尽量准确地说出我想知道怎么做

我想要一个程序,叫它“p1”

我希望该程序从用户那里获得两个数字:

int x,y;
cin>>x;
cin>>y;
现在我想创建另一个程序,它接受两个数字,并将它们相加,就像函数一样,除了一个单独的程序

然后我想运行第一个程序中的第二个程序,使用它从用户那里得到的数字。即:

#include<iostream>
using namespace std;
int main()
{
     int x,y;
     cin>>x;
     cin>>y;
     add(x,y); //this is how I would call a function named "add".  I want to know how to do that with a separate program instead of just a separate function.
     return 0;
}

如何使用它来传递参数,以及如何编写一个接受这些参数的程序?

您的问题有点不清楚

你是不是在寻找类似系统调用的东西


使用system,您可以调用任何可执行文件并将任意数量的命令行参数传递给该可执行文件。

是的,有几种方法,如套接字、管道、rpc

我不确定你想做什么,但你可以用几种方式启动windows应用程序。最常见的“windows”方式是:

  • 用于在windows中启动程序
  • 如果需要返回值,可以使用
听起来您希望从源应用程序中获取argc和argv值,然后将这些值用作上述函数的参数,以启动第二个应用程序

您可以通过多种方式在进程之间进行通信,使用管道、套接字、文件,甚至第二个程序的返回代码就足够了


您最好创建一个DLL从第一个应用程序加载。DLL可以执行任何您想要的操作,并且可以直接将值返回给您,而无需额外的通信层

我不确定是否理解这个问题,但您可以使用以下方法向C/C++程序添加参数:

int main (int argc, char *argv[])
{
   if (argc == 1)

}

是的,这位新加坡建筑师走上了正确的道路。C++控制台应用程序从调用<代码>主(int ARCC,char *ARGV[])< /C>开始,接受两个参数:

  • argc
    =参数计数:输入参数的数量
  • argv
    =参数向量:
    char*
    参数数组
因此,如果您将程序编译为
prog.exe
,并希望以

prog 12 23
然后
argc
是3,参数向量
argv
等于

argv[0] = "prog" ; // (or "prog.exe")
argv[1] = "12" ;
argv[2] = "23" ;

您可以在其中对输入参数执行您想要的操作。

在大多数操作系统上,您可以通过空格分隔参数在system()中传递参数:

system("someapp.exe 42 24");
当然,这个字符串可以由sprintf或std::ostringstream或您所拥有的东西构建

然后您只需要在另一个程序中处理您的参数:

int main(int argc, char **argv) {
  // important - make sure we have enough args
  if (argc != 3) { // first (zeroth) argument is always the program name, so 1+2 args is needed
    fprintf(stderr, "Wrong number of arguments\n");
    return EXIT_FAILURE;
  }
  int a = atoi(argv[1]);
  int b = atoi(argv[2]);
  // do stuff
}

这是一个特定于windows的解决方案,但您可以调用在另一个可执行文件中定义的函数。这通常是DLL的任务,但EXE和DLL都是相同的格式(有一些不同的标志,但它们都是可移植可执行文件(PE)格式),所以应该可以工作。你必须这样做:

caller.cpp:

#include <windows.h>

// [...]

HMODULE moduleHandle = LoadLibrary("callee.exe"); // or .dll
int(*add)(int, int) = (int(*)(int, int))GetProcAddress(moduleHandle, "add");
int result = add(1, 1);
callee.cpp:

#include "callee.h"

int add(int a, int b) { return a + b; }
免责声明:

  • 未测试(语法和逻辑方面)
  • 检查/释放资源时没有错误
参考文献:


需要解决的几个问题:

1) 切勿使用system()。它是邪恶的(不是独立于平台的,安全漏洞等)。system()假定目标计算机有一个命令解释器,而它可能没有

2) 如果您想使用system,可以这样做(假设您有一个名为args的参数向量,要调用的进程位于名为proc的字符串中)

string final=proc;
最终+=”;
对于(int j=0;j
您可以通过假设目标PC有一个编译器(同样是不安全的)并调用它(例如g++source.cpp)来编译

3) 使用管道。代码示例:

inline std::string exec_proc(const char* cmd) {
    std::array<char, 128> buffer;
    std::string result;
    std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
    if (!pipe) cout << "Launch failed, possible permission error" << endl;
    while (!feof(pipe.get())) {
        if (fgets(buffer.data(), 128, pipe.get()) != NULL)
            result += buffer.data();
    }
    return result;
}
inline std::string exec_proc(const char*cmd){
std::数组缓冲区;
std::字符串结果;
标准:共用管道(popen(cmd,“r”),pclose);

如果(我的)CUT注意:我的答案是特定于Windows,因为海报是询问。ExeAll你谈论创建一个.dll,并在其中有C++调用函数。DLL?那么我如何才能运行这个程序从另一个?我假设我写int n=系统(“AppApp.EXE 42 24”);someapp?的返回值取决于操作系统。我不熟悉windows的处理。尤其是在类似Unix的操作系统(如Linux)上,情况并非如此(在这些操作系统上,WEXITSTATUS(return_from_system)获取退出代码)
#include "callee.h"

int add(int a, int b) { return a + b; }
string final = proc;
final += " ";
for (int j = 0; j < args.size(); j++) {
  final += args[j];
  final += " ";    
}
system(final.c_str());
inline std::string exec_proc(const char* cmd) {
    std::array<char, 128> buffer;
    std::string result;
    std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
    if (!pipe) cout << "Launch failed, possible permission error" << endl;
    while (!feof(pipe.get())) {
        if (fgets(buffer.data(), 128, pipe.get()) != NULL)
            result += buffer.data();
    }
    return result;
}