2011-07-23 48 views
5

好吧,假設我有b.exe,它接受一個字符串參數。 我想a.cpp中調用B.EXE,與系統:如何將可變參數傳遞給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; 
    } 

我要的是,當我運行。輸出將是:

s1 after invoke = hello world 

是否有可能這樣做?基本上,我只是想將一個變量傳遞給一個exe,但它必須通過引用,而不僅僅是值,因爲我希望該變量在我調用的exe文件中被處理和修改。我已經在互聯網上搜索瞭解決方案,但它只提供給我一種方式來將值傳遞給exe,而不是通過引用。

任何建議將非常感激,但如果可能,我想以上述修正代碼和包含文件的形式提出的建議(如果有的話)。感謝您的幫助:)

+0

上的進程之間的通信的古典的問題!一個簡單的解決方案是在兩個進程之間共享內存。如果您使用Linux,請搜索'mmap()'並查看示例程序。 :-) – Stan

回答

3

無法修改不同進程間的命令行參數。 s1僅爲A.CPP所知,而s僅爲B.CPP所知。

+0

我明白了......那太糟糕了....謝謝你的回答:) – zia

1

不,這是不可能的。另外,main不接受字符串作爲參數。

您的字符串s1位於持有a.cpp的進程的地址空間中。你不能通過引用在進程之間傳遞項目,這是你嘗試在傳遞s1來處理正在運行的b.exe時實現的。以下是修復語法錯誤時會發生的情況:b.exe複製字符串的內容,並將它們保存在自己的地址空間中。

你會想看看進程間通信來實現類似的事情,但沒有簡單的方法來做到這一點。

0

這是不可能的。你所能做的最好的是按價值傳遞字符串。而通過字符串,我真的是指char數組。

事實上,官方的原型主要是更像

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

如果你希望你的程序用C++編譯,你沒有太多的選擇

0

main(string)語法是不正確的。在C++ main可以有兩個有效簽名:

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

argc包含傳遞給可執行文件和argv點的這些參數數組參數的數量。

您可以將多個參數傳遞給b.exe並根據該參數編寫程序。有關更多信息,您可以搜索main()的簽名以及如何使用它。

0

一個簡單的,但當然不是最漂亮的解決方案,將使用臨時文件:

僞代碼: 通話A) 不要在一個一切),你需要調用B)前。從A),輸出變量到一個臨時文件。從A)撥打電話B 從臨時文件導入變量。清除此文件。 做,你需要在B到盡一切)的B 輸出變量)到臨時文件 B出口)從臨時文件到 輸入變量) 做標準輸出 A出口)

否則,你就需要查看消息傳遞接口(MPI),這不是最簡單的解決方案。

0

無法在兩個進程之間直接修改變量,但可以執行類似的操作來獲得相同的最終結果。

最簡單的方法可能是使用_popen()。基本思想是這樣的:

  • 要將字符串參數從A傳遞給B,可以將它作爲命令行參數傳遞。 B可以從main()的argv []數組中讀取。

  • 但是要將信息返回給B,您需要一些其他技術。 _popen()在內部使用管道,並且爲你設置它的大部分工作,所以A可以使用fgets()或任何其他基於FILE *的函數從B讀取輸出.B然後可以執行printf( 「你好,世界」); '返回'字符串,並且A可以從_popen()返回的FILE *中讀取該字符串。

查看MSDN page on _popen()瞭解更多詳情和示例。

0

嗨,大家好,我知道這是一個老的文章,但每一點幫助:)

發送參數的外部調用的.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

相關問題