• (转)c++--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();

  • 相关阅读:
    题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP
    BZOJ 1867 [Noi1999]钉子和小球 DP
    P5057 [CQOI2006]简单题 前缀异或差分/树状数组
    P2051 [AHOI2009]中国象棋 大力DP
    P4208 [JSOI2008]最小生成树计数
    BZOJ 2440 [中山市选2011]完全平方数 二分+容斥
    Luogu P1951 收费站_NOI导刊2009提高(2) 二分 最短路
    Luogu P3527 [POI2011]MET-Meteors 整体二分
    Luogu P4109 [HEOI2015]定价 贪心
    Luogu P2114_[NOI2014]起床困难综合症 贪心
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/7275808.html
Copyright © 2020-2023  润新知