全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3467
推到 Plurk!
推到 Facebook!

呼叫EXE檔

答題得分者是:Stallion
jasonshu
一般會員


發表:3
回覆:3
積分:1
註冊:2006-12-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-04 14:14:06 IP:59.125.xxx.xxx 訂閱
各位大大
小弟近日有一個關於呼叫EXE檔問題,扒文許久能無法解決
(1)用VC 寫了一支.exe
(2)在Delphi中,呼叫此執行檔計算分析
小弟當然知道用 WinExec
但因EXE檔計算複雜,需要5~20 sec
嘗試用MultiThread解決,但還是有問題,
主要問題應該是EXE檔未執行完成,WinExec該Process已結束,
懇請大大協助解決!
編輯記錄
taishyang 重新編輯於 2007-06-04 17:50:15, 註解 將文章分類成[問題]‧
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-04 16:37:10 IP:211.23.xxx.xxx 訂閱
請問你是如何呼叫 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-04 20:22:15 IP:211.22.xxx.xxx 未訂閱
如果你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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-05 13:21:23 IP:59.125.xxx.xxx 訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-05 14:27:03 IP:59.125.xxx.xxx 訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-05 19:09:15 IP:211.22.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-06 10:39:26 IP:59.125.xxx.xxx 訂閱
大大
感謝您的解釋,問題是我解決後才產生的疑惑,
不過我的作法與您的解釋大同小異,
只是沒想懂Process對PATH的影響
謝啦! 感謝您的協助!我將結案!
系統時間:2024-05-02 12:34:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!