如何取得外部程式的回傳值? |
答題得分者是:RedSnow
|
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
請教各位: 假設我有兩隻 console mode 的程式,A 跟 B
現在我用 BCB 寫了一隻程式要來呼叫 A 跟 B
A 要執行完畢之後才能執行 B. 目前我是用 ShellExec 去呼叫 A 跟 B,
那我要怎麼得到程式的回傳值呢?
(例如:回傳 0 代表正常結束, 回傳 -1 代表不正常結束)
我想藉此得知 A 是否正常執行完畢,是的話再執行 B. 或是有什麼辦法知道 A 已經執行完畢了,以便知道何時可以執行 B 呢?
目前我只想到用 Sleep() 來做個緩衝。 --
http://www.csie.nctu.edu.tw/~chtai/software.php
好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
chtai 您好: 給您一個 CreateProcess() 與 ShellExecute() 混合使用的範例,請參考一下:
AnsiString ExecPrg = "A.exe"; UINT Result; DWORD dwExitCode; STARTUPINFO StartupInfo = {0}; PROCESS_INFORMATION ProcessInfo; StartupInfo.cb = sizeof(STARTUPINFO); Result = CreateProcess(NULL, ExecPrg.c_str(), NULL, NULL, false, 0, NULL, NULL, &StartupInfo, &ProcessInfo); if (Result) { CloseHandle(ProcessInfo.hThread); if (WaitForSingleObject(ProcessInfo.hProcess, INFINITE) != WAIT_FAILED) { GetExitCodeProcess(ProcessInfo.hProcess,&dwExitCode); } CloseHandle(ProcessInfo.hProcess); ShellExecute(this->Handle, "open", "B.exe",NULL, NULL,SW_NORMAL); }範例執行後,會先執行 A.exe 程式,待 A.exe 關閉後,才會再接著執行 B.exe 程式,試試看吧。 |
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
感謝兩位的回應,可是我還是不知怎樣得到程式的回傳值哩~
或許是我之前說得不夠清楚吧~
舉個例子好了,大多數的 console mode 程式都會寫得像這樣:
int main() { if (非預期結果) return -1; .................. return 0; }我想請問的是,我要怎麼知道它是 return -1 還是 return 0 呢? -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
chtai 您好: 我寫的範例中,已經有取得返回值的動作了,下列這一行裡的 dwExitCode 就是接收 A.exe 程式結束後返回值的變數:
GetExitCodeProcess(ProcessInfo.hProcess, &dwExitCode);如果您要依據程式結束後的返回值來做後續處理,那麼就直接用 dwExitCode 值來做判斷即可,您將前一篇的範例稍作修改即可達到您要的動作,例如: AnsiString ExecPrg = "A.exe"; UINT Result; DWORD dwExitCode = -1; // 改成先給預設值 STARTUPINFO StartupInfo = {0}; PROCESS_INFORMATION ProcessInfo; StartupInfo.cb = sizeof(STARTUPINFO); Result = CreateProcess(NULL, ExecPrg.c_str(), NULL, NULL, false, 0, NULL, NULL, &StartupInfo, &ProcessInfo); if (Result) { CloseHandle(ProcessInfo.hThread); if (WaitForSingleObject(ProcessInfo.hProcess, INFINITE) != WAIT_FAILED) { GetExitCodeProcess(ProcessInfo.hProcess,&dwExitCode); } CloseHandle(ProcessInfo.hProcess); if(dwExitCode == 0){ ShellExecute(this->Handle, "open", "B.exe",NULL, NULL,SW_NORMAL); } }發表人 - RedSnow 於 2005/06/07 21:31:56 |
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
引言: chtai 您好: 我寫的範例中,已經有取得返回值的動作了,下列這一行裡的 dwExitCode 就是接收 A.exe 程式結束後返回值的變數:真是抱歉, 是我自己不好,沒注意到 問題已經解決,感謝GetExitCodeProcess(ProcessInfo.hProcess, &dwExitCode);如果您要依據程式結束後的返回值來做後續處理,那麼就直接用 dwExitCode 值來做判斷即可
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
flair
一般會員 發表:0 回覆:4 積分:0 註冊:2003-04-09 發送簡訊給我 |
|
flair
一般會員 發表:0 回覆:4 積分:0 註冊:2003-04-09 發送簡訊給我 |
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |