2012-07-14 25 views
0

這種類型的問題已經在這裏和其他地方多次提出,但似乎我沒有得到任何解決方案。到目前爲止,我所完成的事情是變量可以被兩個不同的應用程序使用(一個應用程序通過系統命令調用另一個應用程序),但是該值不會從主應用程序傳遞到次應用程序。在C++程序中使用一個變量(編譯)

代碼對應於此:

#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被顯示。我嘗試過其他方法,但目前爲止沒有任何工作。有人可以告訴我,我是如何將該值從主程序正確傳遞到輔助程序的?

回答

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> 

,並通過檢索argv在第二個應用程序中。

或者你可以使用IPC,但這在這種特殊情況下是矯枉過正的。

+0

所以這會是系統(app2 +「」+ fnu)?這是正確的語法嗎? – user1331044 2012-07-14 16:17:21

+0

@ user1331044好吧,不完全是。 'app2'必須是'std :: string',你需要將'fnu'轉換爲一個字符串(將'int'轉換爲'string'轉換)。 – 2012-07-14 16:21:54

+0

這聽起來很有希望。我需要一些時間來解決這個問題,我想大概一個小時左右。如果有效,我會讓你知道,並將答案設置爲接受。如果不是的話,我希望你會繼續幫助。 Thx無論如何:-) – user1331044 2012-07-14 16:26:13

1

的應用有不同的地址空間,如果你想從一個應用程序傳遞一些數據到另一個你可以寫一個文件在一個應用程序,並在另一個讀取該文件,也可以使用支持的進程間通信機制之一。由底層操作系統。在類Unix系統上,這些機制是pipe,fifo,消息隊列和共享內存。你甚至可以使用套接字。使用系統功能有點不太好。但是,如果您希望僅使用系統函數,這對於此簡單進程間通信很有用,請嘗試將fnu的值作爲參數傳遞給app2。

char buf [20]; 

sprintf (buf, "app2 %d", fnu); 
system (buf); 
+0

對文件的寫入和讀取是IPC最糟糕的建議。 – 2012-07-14 16:34:17

+0

thx給你Karunesh的幫助:-) – user1331044 2012-07-14 16:52:28