如何将变量参数传递给exe?

时间:2011-07-23 06:50:33

标签: c++ visual-studio-2008 pass-by-reference exe invoke

好吧,假设我有b.exe,它接受一个字符串参数。 我想在a.cpp中使用system:

调用b.exe
    string s1 = "hallo";
    system("b.exe s1");
    printf("s1 after invoke = %s",s1);

这是b.cpp中的代码:

    int main(string s)
    {
         s = "hello world";
         return 0; 
    }

我想要的是,当我运行a.exe时,输出将是:

    s1 after invoke = hello world

可以这样做吗?基本上,我只是想将一个变量传递给一个exe,但它必须通过引用,而不仅仅是值,因为我希望在我调用的exe中处理和修改该变量。我已经在互联网上搜索了解决方案,但它只为我提供了一个方法来将值传递给exe,而不是通过引用...

任何建议都将非常感谢,但如果可能的话,我希望以上述更正代码的形式提出建议,并包括文件(如果有的话)。谢谢你的帮助:))

7 个答案:

答案 0 :(得分:3)

无法在不同进程之间修改命令行参数。只有A.CPP才知道s1,而且只有B.CPP知道s

答案 1 :(得分:1)

不,那是不可能的。另外,main不接受字符串作为参数。

您的字符串s1位于包含a.cpp的进程的地址空间中。您无法通过引用在进程之间传递项目,这是您在将s1传递给进程运行b.exe时尝试实现的。以下是修复语法错误时会发生的情况:b.exe复制字符串的内容,将它们保存在自己的地址空间中。

您需要查看进程间通信以实现类似的功能,但没有简单的方法。

答案 2 :(得分:1)

嗨,大家好,我知道这是一个古老的帖子,但每一点都有帮助:)

使用变量向外部调用的.exe发送参数可以通过使用.c_str()

附加一个用于系统调用的字符串变量来轻松完成。

在回读原始问题之后,似乎该人想要从.exe中获取变量,这是不可能的,但是我正在搜索的内容,因为这是第一个返回的Google链接,我认为很多其他人将从中受益......

示例:

//声明一些变量

void runapp();

string ip;
string img;
string tri = "notepad.exe";
string loadexe;
string space =  " "; //Just a simple ascii space used between arguments

//编译系统调用的字符串

    ip = argv[1];
    img = argv[2];

    loadexe = tri + space + ip + space + img; // compiled string to use for system call

//调用你的.exe

system(loadexe.c_str());

//完整源代码

#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;

void runapp();

string ip;
string img;
string tri = "notepad.exe"; // your .exe to load
string loadexe;
string space =  " "; //Just a simple ascii space used between arguments

void main(int argc , char *argv[])
{   
    ip = argv[1];
    img = argv[2];

    loadexe = tri + space + ip + space + img;

    }else{
        //bla bla bla
}

void runapp()
{
    system(loadexe.c_str());
}

问候

Alphanu

答案 3 :(得分:0)

不可能这样做。您可以做的最好的事情是按值传递字符串。通过字符串,我的意思是char数组。

事实上,main的官方原型更像是

int main(int argc, char** argv);

如果您希望您的程序使用C ++编译,那么您没有太多选择

答案 4 :(得分:0)

您的main(string)语法不正确。在C ++中main可以有两个有效的签名:

int main ();
int main (int argc, char **argv);

其中argc包含传递给可执行文件的参数个数,argv指向这些参数的数组。

您可以将多个参数传递给b.exe并根据该参数编写程序。有关详细信息,您可以搜索main()的签名及其使用方式。

答案 5 :(得分:0)

一个简单但当然不是最漂亮的解决方案是使用临时文件:

伪代码:    致电A)        在致电B)之前,在A)中完成所需的一切。        从A),输出变量到临时文件。        从A),致电B.            从临时文件导入变量。清除此文件。            做你需要做的一切B)            输出变量从B)到临时文件            出口B)        从临时文件到A)输入变量        做标准输出    退出A)

否则你需要查看消息传递接口(M.P.I.),这不是最简单的解决方案。

答案 6 :(得分:0)

不可能在两个进程之间直接修改变量,但是你可以做类似的事情以获得相同的最终结果。

最简单的方法是使用_popen()。基本思路是:

  • 要将字符串参数从A传递给B,可以将其作为命令行参数传递。 B可以从main()中的argv []数组中读取它。

  • 但要将信息返回给B,您还需要其他一些技巧。 _popen()在内部使用管道,并为你设置很多工作,因此A可以使用fgets()或任何其他基于FILE *的函数从B读取输出.B然后可以执行printf( “你好,世界”); “返回”字符串,A可以从_popen()返回的FILE *中读取该字符串。

有关详细信息和示例,请参阅MSDN page on _popen()