環境: windows8 , VS2012
語言: C
進入圖學領域後的作業們至今做了些小東西,個別寫在不同專案下
今天要在VS2012的windows form做整合成UI時,需要到各個專案下執行.exe
於是用到了system()
但他的命令跟使用command line不太一樣 (以下簡稱cmd)
先來看看檔案夾結構即執行結果
OK,這是雙點擊helloworld.exe自動跳出的程式結果,內容是印出argv和argv小程式
如果是在系統cmd 要怎麼呼叫這個程式咧
cmd
指定如下:
>> cd C:\Users\CGL\Documents\Visual Studio 2012\Projects\helloworld\Release
>>helloworld.exe
先進入執行檔所在目錄,再執行.exe
另一個寫法是
>> 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 >> 略過
重點!!
現在回頭想一下一開始使用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 "
注意中間要用&&連在一起呀~~~
再正式一點的寫法是這樣
1 string cmd = "cd /D VS2012\\Project\\ProjectB\\Release && start B.exe "
如此這般
以上是絕對路徑,那相對路徑就以此類推啦
1 string cmd = "cd /D .\\..\\..\\ProjectB\\Release && start B.exe "
總之就是要記得A.cpp在跑的時候是在他的source file那層跑的
還要加參數什麼的可以用insert()把cmd連起來~~
範例程式:
#include<string>
string cmd_line;
int para1 = 5; //參數1
int para2 = 100; //參數2
cmd_line.insert(cmd_line.size(),"&& ");
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");
*注意檔案夾有空格的問題
***找對資料夾層
留言列表