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
    评论
Python可以通过subprocess模块来调用其他语言编写的可执行程序,包括C#、Matlab和C++等语言编写的可执行文件。下面分别介绍一下调用这些语言编写的可执行程序的方法。 调用C#可执行程序 可以使用mono命令来运行C#可执行程序。需要在Python中使用subprocess模块调用该命令。具体操作如下: ```python import subprocess # 调用C#可执行程序 process = subprocess.Popen(['mono', 'your_csharp_executable_file.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() # 输出执行结果 print(output.decode()) print(error.decode()) ``` 调用Matlab可执行程序 可以使用matlab命令来运行Matlab可执行程序。需要在Python中使用subprocess模块调用该命令。具体操作如下: ```python import subprocess # 调用Matlab可执行程序 process = subprocess.Popen(['matlab', '-r', 'your_matlab_executable_file'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() # 输出执行结果 print(output.decode()) print(error.decode()) ``` 调用C++可执行程序 可以直接使用C++编译出来的可执行程序来运行。需要在Python中使用subprocess模块调用该程序。具体操作如下: ```python import subprocess # 调用C++可执行程序 process = subprocess.Popen(['your_cpp_executable_file'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() # 输出执行结果 print(output.decode()) print(error.decode()) ``` 以上是调用C#、Matlab和C++可执行程序的基本方法,根据实际情况可以做一些调整。另外,需要注意的是,调用的可执行程序需要在系统中正确安装并配置好环境变量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值