close


環境: windows8 , VS2012 

語言: C


進入圖學領域後的作業們至今做了些小東西,個別寫在不同專案下

今天要在VS2012的windows form做整合成UI時,需要到各個專案下執行.exe

於是用到了system()  

但他的命令跟使用command line不太一樣 (以下簡稱cmd)

先來看看檔案夾結構即執行結果

01.png 

OK,這是雙點擊helloworld.exe自動跳出的程式結果,內容是印出argv和argv小程式

如果是在系統cmd 要怎麼呼叫這個程式咧


cmd

指定如下:

>> cd C:\Users\CGL\Documents\Visual Studio 2012\Projects\helloworld\Release

>>helloworld.exe

先進入執行檔所在目錄,再執行.exe

02.png 

另一個寫法是

>> cd C:\Users\CGL\Documents\Visual Studio 2012\Projects\helloworld\Release && helloworld.exe

用 && 把兩個指令串起來的概念


那如果要在程式中呼叫另一程式執行檔咧?


在程式A呼叫程式B的執行檔

首先,要寫好程式B  廢話

寫好程式B並編譯完畢後會產生一個執行檔,且稱B.exe

我們假設B的資料夾是這樣的

VS2012 >> Project >> ProjectB >> ProjectB >>這個資料夾下層應該是他的source file,像 B.cpp B.h的這種

>> Release >> B.exe (因為compile時跑Release mode所以會產生執行檔喔 )

>> Debug    >> 沒跑debug mode,此處可略~~


以VS預設來說,A的資料夾會跟B在project相遇 一段愛與勇氣的故事展開了!!


VS2012 >> Project >> ProjectA >> ProjectA >>這個資料夾下層應該是他的source file,像 A.cpp A.h的這種

>> Release >>  A.exe

>> Debug    >> 略過


不管了直接進入A.cpp

重點!!

現在回頭想一下一開始使用cmd是怎麼跑的,首先,移動到執行檔(B.exe)所在的資料夾下

再來,執行他!!

1  string cmd1 = "cd VS2012\\Project\\ProjectB\\Release";    

2  string cmd2 = "B.exe";

3  system(cmd1.c_str());

4  system(cmd2.c_str());


然後他就會跟你說找不到路徑之類的error message

這是因為A的程式在compile時,是在ProjectA這層下(有Source File的那層)

跑第三行時,程式跑到cmd1路徑的資料夾下,可是執行完後,他就回到原本ProjectA那層了

所以要把他寫在一起!!

1 string cmd = "cd VS2012\\Project\\ProjectB\\Release && B.exe "

2  system(cmd.c_str());

注意中間要用&&連在一起呀~~~

再正式一點的寫法是這樣

1 string cmd = "cd /D VS2012\\Project\\ProjectB\\Release && start B.exe "

2  system(cmd.c_str());

如此這般

以上是絕對路徑,那相對路徑就以此類推啦

1 string cmd = "cd /D .\\..\\..\\ProjectB\\Release && start B.exe "

2  system(cmd.c_str());

總之就是要記得A.cpp在跑的時候是在他的source file那層跑的

還要加參數什麼的可以用insert()把cmd連起來~~

範例程式:

#include<string>

using namespace std;
int main(){

string cmd_line;

int para1 = 5;     //參數1

int para2 = 100; //參數2

cmd_line = "cd  .\\..\\..\\ProjectB\\Release ";

cmd_line.insert(cmd_line.size(),"&& ");

cmd_line.insert(cmd_line.size()," A.exe ");

cmd_line.insert(cmd_line.size(),para1);

cmd_line.insert(cmd_line.size(),para2); 


printf("cmd=\n%s\n\n",cmd_line);

system(cmd_line.c_str());

system("PAUSE");

return 0;

}





*注意檔案夾有空格的問題

***找對資料夾層


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 sherrygottalent 的頭像
    sherrygottalent

    sherry murmuring

    sherrygottalent 發表在 痞客邦 留言(1) 人氣()