如何使用 Visual Studio 2005 在两个不同的 c++ 程序之间获取返回值

Posted

技术标签:

【中文标题】如何使用 Visual Studio 2005 在两个不同的 c++ 程序之间获取返回值【英文标题】:How to get the return value between two different c++ program using Visual Studio 2005 【发布时间】:2015-05-01 07:13:01 【问题描述】:

现在,我有两个程序 A 和 B。程序 A 使用system() 执行程序 B。

但是,程序B使用写文件的方式返回它的执行结果。

程序A是否有更好的方法来获取程序B的返回值?

例如

在程序 A 中

int main()
    system("B.exe");
    readFile(finePath);
    //do something
    return 0;

在程序 B 中

int main()
    char temp[1024];
    //do something
    writeFile(temp);
    return 0;

【问题讨论】:

向我们展示您的尝试(简约代码)。 见***.com/questions/3470215/… - 也许你会在那里找到一些有用的信息 “返回值”这个词对我来说有点混乱,所以只是为了确定。您不是在询问程序 B 中的“状态代码”,对吧?问题是关于获得 B 产生的各种结果/输出,对吗?因为“状态码”通常由 system() 直接返回。见cplusplus.com/reference/cstdlib/system 我更新了一个例子。请帮帮我。 【参考方案1】:

管道是一种相对简单的跨平台方法,无需在各处创建临时文件,也无需处理这样做可能产生的其他问题。

static string pcommand(const string& cmd) 

    FILE* stream = _popen(cmd.c_str(), "r");
    string data;
    if (stream) 
    
        while (!feof(stream))
        
            const int buffer_size = 256;
            char buffer[buffer_size];
            if (fgets(buffer, buffer_size, stream))
                data.append(buffer);
        
        _pclose(stream);
    
    return data;


int main()

    string 'str' = pcommand("dir");
    // 'str' now contains the results sent to stdout

【讨论】:

是的:msdn.microsoft.com/en-us/library/96ayss4b.aspx。我认为通常在其他平台上,您可以避免使用下划线前缀。【参考方案2】:

方法一。

尝试使用ERRORLEVEL 系统变量来检查任何正在运行的程序的返回值。

注意: ERRORLEVEL 是一个系统变量,所以将其用作such... ;)

方法二。

您可以使用Process.ExitCode 属性。

【讨论】:

以上是关于如何使用 Visual Studio 2005 在两个不同的 c++ 程序之间获取返回值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2005 中进行单元测试?

如何在 Visual Studio 2005 中禁止警告 4200?

如何在 Visual Studio 2005 中抑制单个 BizTalk 警告

visual studio 2005 图像上 添加 数字

如何使用 Visual Studio 2005 在两个不同的 c++ 程序之间获取返回值

如何使用 Visual Studio 2005 设置 Google C++ 测试框架 (gtest)