C++调用exe文件
来源:互联网 发布:tvp是什么软件 编辑:程序博客网 时间:2024/05/21 14:03
当项目比较大的时候,通常会分开来开发,如果分开的部分只是一些函数或类,整合的时候就可以使用静态库或动态库。但如果分开的是一个exe文件,整合的时候,就要通过调用exe文件来使用。尤其是当第三方软件是一个用c语言编写的exe文件时,更是需要如此。
最近在我所开发的LCDS系统当中就碰到了这样的问题。他需要调用一个分类器来处理数据,而手头上的分类器是经典的C4.5决策树分类器,它是用c语言写的,没有.h头文件,生成的是一个exe文件,通过在命令行执行main函数来处理数据。如果想把其改成静态库或动态库,因为没有头文件,改写后似乎不好调用其函数,因此考虑直接调用其生成的exe文件。可考虑的方法有:
2.使用execl或execv函数
3.使用WinExec函数
4.使用CreateProcess函数
5.使用ShellExecuteEx函数
SHELLEXECUTEINFO
ShellExecuteEx 的参数在C++中其结构为:
typedef struct _SHELLEXECUTEINFO {
DWORD cbSize;
ULONG fMask;
HWND hwnd;
LPCTSTR lpVerb;
LPCTSTR lpFile;
LPCTSTR lpParameters;
LPCTSTR lpDirectory;
int nShow;
HINSTANCE hInstApp;
LPVOID lpIDList;
LPCTSTR lpClass;
HKEY hkeyClass;
DWORD dwHotKey;
union {
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
参数详解:
cbSize
存储该结构的长度,以字节为单位。
fMask
一个标志数组,用来设置其他成员的有效性
SEE_MASK_CLASSKEY
SEE_MASK_CLASSNAME
SEE_MASK_CONNECTNETDRV
SEE_MASK_DOENVSUBST
SEE_MASK_FLAG_DDEWAIT
SEE_MASK_FLAG_LOG_USAGE
SEE_MASK_FLAG_NO_UI
SEE_MASK_HMONITOR
SEE_MASK_HOTKEY
SEE_MASK_ICON
SEE_MASK_IDLIST
SEE_MASK_INVOKEIDLIST
SEE_MASK_NOASYNC
SEE_MASK_NOCLOSEPROCESS
SEE_MASK_NOZONECHECKS
SEE_MASK_NO_CONSOLE
SEE_MASK_UNICODE
SEE_MASK_FILEANDURL
hwnd
调用这个ShellExecuteEx的窗口句柄
lpVerb
设定这个ShellExecuteEx的动作,包括:
lpFile
lpParameters
运行/打开程序的参数,如果打开的是一个文档,则该项无效
lpDirectory
指明工作目录的名字,成员没有说明,则默认为当前目录
nShow
说明ShellExecuteEx打开的程序将以什么形式出现
hInstApp
如果函数运行成功,该项的值将大于32,否则会是下列错误对应的值
lpIDList
一个itemidlist结构的地址,用来存储成员的特别标识符,当fMask不包括see_mask_idlistsee_mask_ invokeidlist 时该项被忽略
lpClass
用以指明文件类别的名字或GUID,当fMask不包括see_mask_classname时该项被忽略
hkeyClass
获得已在系统注册的文件类型的Handle,当fMask不包括see_mask_classkey时该项被忽略
dwHotKey
程序的热键关联,低位存储虚拟关键码(Key Code),高位存储修改标志位(HOTKEYF_),修改标志(modifier
被忽略
DUMMYUNIONNAME
hIcon
取得对应文件类型的图标的Handle,当fMask不包括SEE_MASK_ICON时该项被忽略
hMonitor
将文档显示在显示器上的Handle,当fMask不包括SEE_MASK_HMONITOR时该项被忽略
hProcess
用于进行return操作的成员,若fMask不设为see_mask_nocloseprocess则该项值为null,即使fMask设为
see_mask_nocloseprocess,若没有进程启动,该项值仍为null。即没有新的进程启动,则该项值一只为null
ShellExecuteEx的用法
附上代码:
启动:
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "xxx.exe"; //can be a file as well
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
关闭:
if( ShExecInfo.hProcess != NULL)
{
}
- c调用exe
- c调用exe
- 页面调用EXE文件
- 页面调用EXE文件
- windowsMobile调用exe文件
- java调用exe文件
- 调用exe文件
- JS调用exe文件
- 程序调用.exe文件
- js调用 exe文件
- C++调用exe文件
- java调用exe文件
- C++调用exe文件
- C++调用exe文件
- VC调用exe文件
- Java调用.exe文件
- 如何在C#代码中调用exe执行文件?
- C语言调用exe并将结果输出到文件
- ABAP的MD5
- Access注入点高级运用总结
- 研磨设计模式之简单工厂模式-2
- 让span有固定宽度 兼容IE和firefox
- Application .SetCompatibleTextRenderingDefault 方法
- C++调用exe文件
- UVa 10921 - Find the Telephone
- Unity3d 管理多个摄像机
- Apache POI练习生成EXCEL(1)
- 秒杀多线程第一篇 多线程笔试面试题汇总 .
- vc编译报错 unresolved external symbol __imp__PlaySoundA@12 解决办法
- 百度地图从零学起(五)地图事件
- 汇编
- 三星A9四核 Exynos 4412调试android4.0.4,极速开机