C++程序怎样调用exe可执行文件

阅读: 评论:0

2024年2月3日发(作者:)

C++程序怎样调用exe可执行文件

C++程序怎样调用exe可执行文件

在开发项目的时候,有的时候会分开来开发,分开的有时是exe文件,有的时候也会调用现成的工具包里面的一些exe文件,这样在项目里面就要通过调用exe文件来使用。

那么在C++里面直接调用exe文件的方法有哪些呢?现在可考虑的方法主要有:

a.使用system函数

b.使用exec或者是execv函数

c.使用WinExec函数

d.使用CreateProcess函数

e.使用ShellExcecuteEx函数

1) 上面的5中方法中,system函数,函数原型system(执行shell命令)定义函数是,int system(const char * string),可以调用一些DOS命令,比如:

system("cls");//清屏,等于在DOS上使用cls命令

system函数会调用fork()函数产生子进行横,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回调用的进程,system函数不能控制程序窗口是否显示。一般在项目中,这种方法不予考虑。

2)使用execl或execv函数

这是exec函数族里面的两个函数,在UNIX环境下用的比较多,exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,也就是说在调用进程内部执行一个可执行文件,这里的可执行文件既可以是二进制文件,也可以是任何Linux下的可执行的脚本文件,与一般情况不同,exec函数族的函数执行成功后不会返回,只有调用失败了才会返回一个-1,从原程序的调用点接着往下执行。它也是不能控制程序窗口是否显示。

3)使用WinExec函数

WinExec函数可以方便地在应用程序中执行一个程序,执行一个标准程序一般使用:

WinExec('C:', SW_SHOWNORMAL);

第二个参数是控制程序主窗口的显示方式,用WinExec只能执行exe文件,但是WinExec函数不好控制主程序来等该exe程序的结束。WinExec是Windows的老函数了,现在的CreateProcess几乎可以替代WinExe的所有功能。

4)使用CreateProcess函数

CreateProcess函数是新建一个进程,下面是一个使用CreateProcess函数的例子:

void createchildprocessandwaituntildone(const ansistring& strcmdline)

{

process_information piprocinfo;

startupinfo sistartinfo;

// set up members of startupinfo structure.

= sizeof(startupinfo);

rved = null;

rved2 = null;

rved2 = 0;

top = null;

s = 0;

// create the child process.

createprocess(

null,

strcmdline.c_str(),

null, // process security attributes

null, // primary thread security attributes

0, // handles are inherited

0, // creation flags

null, // use parent's environment

null, // use parent's current directory

&sistartinfo, // startupinfo pointer

&piprocinfo); // receives process_information

// wait for the processs to finish

dword rc = waitforsingleobject(

ss, // process handle

infinite);

}

使用CreateProcess函数,你必须人为地控制该进程的生死,这一方面是使用进程控制来实现。进程控制的意义在于可以创建一个进程,并且可以通过进程句柄结束进程。

5)使用ShellExcecuteEx函数

这个函数主要是在文件上执行一个函数,如果执行成功则返回一个非0值,否则返回一个0值。函数的原型是:

WINSHELLAPI BOOL WINAPI ShellExecuteEx(

LPSHELLEXECUTEINFO lpExecInfo);

参数lpExecInfo:是数据结构 LPSHELLEXECUTEINFO 的地址,包含了和接收一些被执行的应用程序的一些信息。下面是一个使用的示例:

SHELLEXECUTEINFO ShExecInfo = {0};

= sizeof(SHELLEXECUTEINFO);

= SEE_MASK_NOCLOSEPROCESS;

= NULL;

= _T("open");

= _T("");

meters = _T("-a a");

ctory = NULL;

= SW_HIDE;

pp = NULL;

ShellExecuteEx(&ShExecInfo);

WaitCursorBegin();

WaitForSingleObject(ss,INFINITE);

WaitCursorEnd();

这个函数可以通过meters来传递exe文件的参数,通过属性来控制程序窗口是否显示。

后面三个函数都是SDK函数,现在在执行项目中的exe文件的时候,使用比较多的就是后面得两个函数,我在自己的项目中使用的就是ShellExecuteEx函数,比CreateProcess函数使用方便一些

C++程序怎样调用exe可执行文件

本文发布于:2024-02-03 19:51:12,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170696107251118.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   执行   进程   调用   使用   文件   可执行文件   程序
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23