0

この種の質問は、ここや他の場所で何度か聞かれましたが、どの解決策も機能しないようです。私がこれまでに「達成した」ことは、変数を2つの異なるアプリケーションで使用できることです(一方のアプリケーションはシステムコマンドを介してもう一方のアプリケーションを呼び出します)が、値はメインアプリからセカンダリアプリに渡されません。

コードはこれに対応します:

 #ifndef avis_h
    #define avis_h

    #include "string"
    using namespace std;

    extern int fnu;

    #endif

これがヘッダーファイルavis_hです。

メインプログラムは次のようになります。

    #include "stdafx.h"
    ...
    #include "iostream"
    #include "avis_h.h"


    int fnu;

    int main(){fnu=3;system (app2);}

ここで、app2はセカンダリアプリケーションです。

    #include "stdafx.h"
    ...
    #include "iostream"
    #include "avis_h.h"

    int fnu;

    int main(){cout<<fnu;Sleep(10);}

数字の3の代わりに数字の0が表示されます。私は別の方法を試しましたが、今のところうまくいきませんでした。その値をメインプログラムからセカンダリプログラムに正しく渡す方法を教えてもらえますか?

4

2 に答える 2

1

そのような独立したアプリケーション間で変数を共有することはできません。

systemこれをパラメーターとしてコマンドに渡すことができます。

//commandLine is app2 + " " + the parameter
system (commandLine);

壊す:

std::stringstream ss; 
ss << app2; 
ss << " "; 
ss << fnu;
std::string commandLine = ss.str();
system(commandLine.c_str());

そして忘れないでください:

#include <sstream>
#include <string>

2番目のアプリケーションでそれを取得しargvます。

または、IPCを使用することもできますが、この特定のケースではそれはやり過ぎです。

于 2012-07-14T16:12:27.347 に答える
1

アプリケーションには異なるアドレス空間があり、あるアプリケーションから別のアプリケーションにデータを渡したい場合は、あるアプリケーションでファイルに書き込んで別のアプリケーションでファイルを読み取るか、基盤となるオペレーティングでサポートされているプロセス間通信メカニズムの1つを使用できます。システム。Unixライクなシステムでは、これらのメカニズムはパイプ、FIFO、メッセージキュー、および共有メモリです。ソケットを使用することもできます。システム関数を使用するのは、あまり良くありません。ただし、この単純なプロセス間通信で機能するシステム関数のみを使用する場合は、fnuの値をパラメーターとしてapp2に渡してみてください。

char buf [20];

sprintf (buf, "app2 %d", fnu);
system (buf);
于 2012-07-14T16:27:13.410 に答える