mfc下调用console程序——四种方法
来源:互联网 发布:运动文胸 知乎 编辑:程序博客网 时间:2024/06/06 01:02
说明:基于对话框的MFC程序+console程序,vc6.0下。
一、由于在MFC下做了界面,而在Console程序下做的训练和识别部分,而将这部分整合到MFC下很繁琐,所以就在MFC下button控件添加响应函数直接调用console程序的exe。网上有很多人介绍相关知识,主要是四个函数:
WinExec,ShellExecute ,ShellExecuteEX,CreateProcess。
(1)WinExec比较简单,
UINT WinExec( LPCSTR lpCmdLine, // 命令路径 ,UINT uCmdShow // 显示方式 );
(2)shellExecuteHINSTANCE ShellExecute(
HWND hwnd, //父窗口句柄
LPCTSTR lpOperation, //操作, 打开方式 "edit","explore","open","find","print","NULL"
LPCTSTR lpFile, //文件名,前面可加路径
LPCTSTR lpParameters, //参数
LPCTSTR lpDirectory, //默认文件夹
INT nShowCmd //显示方式
);
(3) ShellExecuteEx
BOOL ShellExecuteEx(LPSHELLEXECUTEINFO lpExecInfo);
要注意到应用这个结构,将其中得参数设置好即可。
SHELLEXECUTEINFO 结构(4)CreateProcess
一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。
(5)区别与联系:
WinExec功能最简单,他的存在是为了向下兼容(WinExe是从16位Win3.x开始就有的函数) 。
ShellExecute与ShellExecuteEx的区别是ShellExecuteEx可以返回新创建进程的 hProcess;
ShellExecute 在创建进程后立即调用CloseHandle 关闭新进程句柄而ShellExecuteEx将其返回。
CreateProcess 应该是 ShellExecute / ShellExecuteEx 实现的基础。 注意调用CreateProcess/ ShellExecuteEx 这类返回新进程句柄(CreateProcess 还返回新进程的主线程句柄),如果不需要访问这些内核对象,应该立即调用CloseHandle关闭这些句柄,否则即使新进程终止执行,保存他的状态的内核对象仍不会被清除。
二、(1)开始选用shellexcute,但是由于要把exe运行结果保存到txt文档中,运行的过程中经常不能正确读取文件,所以需要等到调用的程序线程运行结束,再回到主程序运行。加上WaitForSingleObject(h,INFINITE);,其中h是shellexecute返回的句柄,调用程序运行完竟然不能自动结束了(搞不懂为什么。。。。)(2)换成应用shellexecuteEx,并使用WaitForSingleObject(ShExecInfo.hProcess,INFINITE);程序可以正常运行了。
三、待改进工作:
(1)第四种方法还没用试。
(2)在程序运行过程中,需要对方的数据传递,看到的方法主要是管道,但是还没有尝试,现在实现都是依托在txt文档。即:将MFC主程序执行特征结果保存在test.txt中作为调用程序的读入文件,然后再将调用程序运行识别结果存为result.txt中,再让MFC程序读取,得到识别结果,所以要找方法实现二者之间的通信。
- mfc下调用console程序——四种方法
- mfc下调用console程序——CreatProcess
- mfc程序下调用console窗口
- VC下MFC程序调用console程序-存储文档的路径问题
- MFC第二课——Console程序、进程和线程
- MFC 改console程序
- Win32和mfc下弹出console窗口的方法
- MFC中调用Console窗口
- 一个MFC Console程序实例
- 在rails的console下调用helper方法
- MFC调用外部exe程序的方法
- pycharm下的Python console 调试当前程序方法
- win32 & mfc 调用console优化调试
- vc6.0或者vs2008 MFC程序采用console输出调试信息的方法
- [转]MFC程序调出console窗口
- windows下网络编程(四)——MFC CSocket
- Symbian调试——模拟器上Console程序的Debug方法
- Symbian调试——模拟器上Console程序的Debug方法
- Jquery 跨域请求
- Java Daemon线程
- Linux驱动开发学习步骤
- 第三章:数据链路层(三)
- 字符之谜总结
- mfc下调用console程序——四种方法
- 第四章 网络层之IP支持协议--OSPF起源、概述、工作原理
- 指针赋值为常量字符串可返回,数组赋值为常量字符串不可返回的原理
- 第四章 网络层之IP支持协议--OSPF(2)起源、概述、工作原理
- JAVA实现的电子邮件发送器
- 第四章 网络层之IP支持协议--OSPF(3)起源、概述、工作原理
- TMOD TCON SCON
- Linux 2.6.19.x 内核编译配置
- 随机概率发生器