C++程式中調用exe可執行檔

來源:互聯網
上載者:User

當項目比較大的時候,通常會分開來開發,如果分開的部分只是一些函數或類,整合的時候 就可以使用靜態庫或動態庫。但如果分開的是一個exe檔案,整合的時候,就要通過調用exe檔案來使用。尤其是當第三方軟體是一個用c語言編寫的exe檔案時,更是需要如此。

最近在我所開發的LCDS系統當中就碰到了這樣的問題。他需要調用一個分類器來處理資料,而手頭上的分類器是經典的C4.5決策樹分類器,它是用c語言寫的,沒有.h標頭檔,產生的是一個exe檔案,通過在命令列執行main函數來處理資料。如果想把其改成靜態庫或動態庫,因為沒有標頭檔,改寫後似乎不好調用其函數,因此考慮直接調用其產生的exe檔案。可考慮的方法有:

1.使用system函數2.使用execl或execv函數3.使用WinExec函數4.使用CreateProcess函數5.使用ShellExecuteEx函數

system函數和execl、execv函數不能控製程序視窗是否顯示,我要的效果是不顯示該exe程式的視窗,所以這兩種方法不予考慮。WinExec函數不好控制主程式來等該exe程式的結束,所以放棄。CreateProcess函數是建立一個進程,所以,你必須人為地控制該進程的生死,不如ShellExecuteEx方便,所以最終我選擇的是ShellExecuteEx函數。程式如下:

SHELLEXECUTEINFO  ShExecInfo  =  {0}; 
 ShExecInfo.cbSize  =  sizeof(SHELLEXECUTEINFO); 
 ShExecInfo.fMask  =  SEE_MASK_NOCLOSEPROCESS; 
 ShExecInfo.hwnd  =  NULL; 
 ShExecInfo.lpVerb  =  _T("open"); 
 ShExecInfo.lpFile  =  _T("c4.5.exe");                         
 ShExecInfo.lpParameters  =  _T("-f train");             
 ShExecInfo.lpDirectory  =  NULL; 
 ShExecInfo.nShow  =  SW_HIDE; 
 ShExecInfo.hInstApp  =  NULL;             
 ShellExecuteEx(&ShExecInfo);
 WaitCursorBegin();
 WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
 WaitCursorEnd();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.