呼叫EXE檔 |
答題得分者是:Stallion
|
jasonshu
一般會員 發表:3 回覆:3 積分:1 註冊:2006-12-19 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
請問你是如何呼叫 exe 的?把 code 丟上來,也許有人會知道原因
===================引 用 jasonshu 文 章=================== 各位大大 小弟近日有一個關於呼叫EXE檔問題,扒文許久能無法解決 (1)用VC 寫了一支.exe (2)在Delphi中,呼叫此執行檔計算分析 小弟當然知道用 WinExec 但因EXE檔計算複雜,需要5~20 sec 嘗試用MultiThread解決,但還是有問題, 主要問題應該是EXE檔未執行完成,WinExec該Process已結束, 懇請大大協助解決! |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
如果你Delphi寫的程式必須等到vc++寫的程式完成後才能繼續執行後續的動作不能使用Thread,必須使用CreateProcess配合WaitForSingleObject,查一下KTOP裡面很多範例~
===================引 用 jasonshu 文 章=================== 各位大大 小弟近日有一個關於呼叫EXE檔問題,扒文許久能無法解決 (1)用VC 寫了一支.exe (2)在Delphi中,呼叫此執行檔計算分析 小弟當然知道用 WinExec 但因EXE檔計算複雜,需要5~20 sec 嘗試用MultiThread解決,但還是有問題, 主要問題應該是EXE檔未執行完成,WinExec該Process已結束, 懇請大大協助解決! |
jasonshu
一般會員 發表:3 回覆:3 積分:1 註冊:2006-12-19 發送簡訊給我 |
Stallion 大大
根據您的提示, 轉向CreateProcess方向找尋Solution, 但是結果還是有問題,想請問 (1)呼叫的EXE檔中有使用DataStruction,會影響嗎? (2)單獨執行檔案約12sec,會輸出一個TXT檔,卻一直無法產出。 以下是我的呼叫Code,請指點一下 procedure TfrmD110.Button3Click(Sender: TObject); var tSI : TStartupInfo; tPI : TProcessInformation; dwI : DWORD; VarU : UINT; begin FillChar(tSI, sizeof(TStartupInfo), 0); tSI.cb := sizeof(TStartupInfo); tSI.dwFlags := STARTF_USESHOWWINDOW; tSI.wShowWindow:=SW_SHOWMINIMIZED; if CreateProcess(nil,PChar('D:\programtest\BIN_ANALYSIS_Data\Debug\CSV_AnalysisP.exe'),nil,nil,true,DETACHED_PROCESS, nil,nil,tSI,tPI) then begin dwI := WaitForSingleObject(tPI.hProcess, 200000); if (dwI <> WAIT_FAILED) then begin if (GetExitCodeProcess(tPI.hProcess, dwI)) then end; CloseHandle(tPI.hProcess); CloseHandle(tPI.hThread); end; ===================引 用 Stallion 文 章=================== 如果你Delphi寫的程式必須等到vc 寫的程式完成後才能繼續執行後續的動作不能使用Thread,必須使用CreateProcess配合WaitForSingleObject,查一下KTOP裡面很多範例~ ===================引 用 jasonshu 文 章=================== 各位大大 小弟近日有一個關於呼叫EXE檔問題,扒文許久能無法解決 (1)用VC 寫了一支.exe (2)在Delphi中,呼叫此執行檔計算分析 小弟當然知道用 WinExec 但因EXE檔計算複雜,需要5~20 sec 嘗試用MultiThread解決,但還是有問題, 主要問題應該是EXE檔未執行完成,WinExec該Process已結束, 懇請大大協助解決! |
jasonshu
一般會員 發表:3 回覆:3 積分:1 註冊:2006-12-19 發送簡訊給我 |
Stallion 大大
我想你的方向是對的,而我也解決的部分問題,但是下列問題不知原因為何 我的EXE檔呼叫多筆資料做交叉比對, 但何以在EXE檔內要給絕對位置? ===================引 用 jasonshu 文 章=================== Stallion 大大 根據您的提示, 轉向CreateProcess方向找尋Solution, 但是結果還是有問題,想請問 (1)呼叫的EXE檔中有使用DataStruction,會影響嗎? (2)單獨執行檔案約12sec,會輸出一個TXT檔,卻一直無法產出。 以下是我的呼叫Code,請指點一下 procedure TfrmD110.Button3Click(Sender: TObject); var ? tSI : TStartupInfo; ? tPI : TProcessInformation; ? dwI : DWORD; ? VarU : UINT; begin?????????????????????????????????????????????????????????????????????????????????????????????????? ? FillChar(tSI, sizeof(TStartupInfo), 0); ? tSI.cb := sizeof(TStartupInfo); ? tSI.dwFlags := STARTF_USESHOWWINDOW; ? tSI.wShowWindow:=SW_SHOWMINIMIZED; ? if CreateProcess(nil,PChar('D:\programtest\BIN_ANALYSIS_Data\Debug\CSV_AnalysisP.exe'),nil,nil,true,DETACHED_PROCESS, nil,nil,tSI,tPI) then begin ??? dwI := WaitForSingleObject(tPI.hProcess, 200000); ??? if (dwI <> WAIT_FAILED) then? begin ????? if (GetExitCodeProcess(tPI.hProcess, dwI)) then ??? end;? ????? CloseHandle(tPI.hProcess);? ????? CloseHandle(tPI.hThread); end; ===================引 用 Stallion 文 章=================== 如果你Delphi寫的程式必須等到vc 寫的程式完成後才能繼續執行後續的動作不能使用Thread,必須使用CreateProcess配合WaitForSingleObject,查一下KTOP裡面很多範例~ ===================引 用 jasonshu 文 章=================== 各位大大 小弟近日有一個關於呼叫EXE檔問題,扒文許久能無法解決 (1)用VC 寫了一支.exe (2)在Delphi中,呼叫此執行檔計算分析 小弟當然知道用 WinExec 但因EXE檔計算複雜,需要5~20 sec 嘗試用MultiThread解決,但還是有問題, 主要問題應該是EXE檔未執行完成,WinExec該Process已結束, 懇請大大協助解決! |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
1.連續兩個問題,不知道你上面的問題到底解決沒?
2.先談這個問題,我想你的迷失是在父程式 Spawn 子程式的問題,假設Delphi的執行檔是 A, VC 的程式是 B, B 所產生或處理的位置在 C 點。因此: ( 2.1) A Spawn B 出來,雖然是B程式正在執行,可是記得你的位置在未做目錄切換前,你的位置(Current Directory)是在A執行檔的目錄位置。 (2.2)如果要B程式所處理的資料以相對位置來作,方法雖然很多,但是個人認為最佳方案是:重寫A程式,於一執行後,將工作目錄切到B程式所在目錄,並且重寫B程式將其所產生的或處理的資料永遠放在B程式目前目錄。 ===================引 用 jasonshu 文 章=================== Stallion 大大 我想你的方向是對的,而我也解決的部分問題,但是下列問題不知原因為何 我的EXE檔呼叫多筆資料做交叉比對, 但何以在EXE檔內要給絕對位置? ===================引 用 jasonshu 文 章=================== Stallion 大大 根據您的提示, 轉向CreateProcess方向找尋Solution, 但是結果還是有問題,想請問 (1)呼叫的EXE檔中有使用DataStruction,會影響嗎? (2)單獨執行檔案約12sec,會輸出一個TXT檔,卻一直無法產出。 以下是我的呼叫Code,請指點一下 procedure TfrmD110.Button3Click(Sender: TObject); var ? tSI : TStartupInfo; ? tPI : TProcessInformation; ? dwI : DWORD; ? VarU : UINT; begin?????????????????????????????????????????????????????????????????????????????????????????????????? ? FillChar(tSI, sizeof(TStartupInfo), 0); ? tSI.cb := sizeof(TStartupInfo); ? tSI.dwFlags := STARTF_USESHOWWINDOW; ? tSI.wShowWindow:=SW_SHOWMINIMIZED; ? if CreateProcess(nil,PChar('D:\programtest\BIN_ANALYSIS_Data\Debug\CSV_AnalysisP.exe'),nil,nil,true,DETACHED_PROCESS, nil,nil,tSI,tPI) then begin ??? dwI := WaitForSingleObject(tPI.hProcess, 200000); ??? if (dwI <> WAIT_FAILED) then? begin ????? if (GetExitCodeProcess(tPI.hProcess, dwI)) then ??? end;? ????? CloseHandle(tPI.hProcess);? ????? CloseHandle(tPI.hThread); end; ===================引 用 Stallion 文 章=================== 如果你Delphi寫的程式必須等到vc 寫的程式完成後才能繼續執行後續的動作不能使用Thread,必須使用CreateProcess配合WaitForSingleObject,查一下KTOP裡面很多範例~ ===================引 用 jasonshu 文 章=================== 各位大大 小弟近日有一個關於呼叫EXE檔問題,扒文許久能無法解決 (1)用VC 寫了一支.exe (2)在Delphi中,呼叫此執行檔計算分析 小弟當然知道用 WinExec 但因EXE檔計算複雜,需要5~20 sec 嘗試用MultiThread解決,但還是有問題, 主要問題應該是EXE檔未執行完成,WinExec該Process已結束, 懇請大大協助解決! |
jasonshu
一般會員 發表:3 回覆:3 積分:1 註冊:2006-12-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |