C++程序中调用exe可执行文件【转】

当项目比较大的时候,通常会分开来开发,如果分开的部分只是一些函数或类,整合的时候 就可以使用静态库或动态库。但如果分开的是一个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();


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tsd3698/archive/2007/10/15/1826226.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值