我想在VC ++中创建一个程序/函数,允许我运行EXE文件并从中接收返回值。
我要运行的EXE文件是一个控制台应用程序,需要两个参数 Arg1 (String)和 Arg2 (Float),然后返回 OutPut (浮动)。
类似的东西:
OutPut = MyEXEFile.exe Arg1 Arg2
答案 0 :(得分:1)
命令行参数只有一种数据类型:C风格字符串数组。
输入和输出只有一种数据类型:字节流。
如果使用CreateProcess
头文件中的<windows.h>
,则可以提供任何命令行并重定向输出。其他数据类型(如float
)的处理方式与在数据文件中处理它们的方式相同。
以下是MSDN上的示例:Creating a Child Process with Redirected Input and Output
答案 1 :(得分:0)
答案 2 :(得分:0)
你过度杀戮了。 对于命令行应用程序,系统命令将执行您要查找的内容。
int status = system("MyEXEFile.exe Arg1 Arg2");
答案 3 :(得分:0)
我找到了解决方案,这对我来说很好,我测试它,它运作良好。
这是我找到解决方案的页面的链接,我修复了一些错误,现在它已准备好实施。
这是我们需要执行的例子。 PS:这一行不是我们程序的一部分,它只是在这里解释算法:
MyEXEFile.exe Arg1 Arg2 > sResult
&#34; MyEXEFile.exe&#34; 带两个参数( Arg1 和 Arg2 )并返回< strong> sResult 变量。
让我们使用CreatProcess使用Visual C ++编写这个例子:
CString ExePath="C:\\MyEXEFile.exe";
CString arg1="2";
CString arg2="3";
CString sResult="";
CString strCommandLine = ExePath + " " + arg1 + " " + arg2;
// Call the ExecuteExternalFile function
sResult = ExecuteExternalFile(strCommandLine);
这是将读取 MyEXEFile.exe 文件输出的函数:
CString ExecuteExternalFile(CString csExecute)
{
SECURITY_ATTRIBUTES secattr;
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;
HANDLE rPipe, wPipe;
//Create pipes to write and read data
CreatePipe(&rPipe,&wPipe,&secattr,0);
//
STARTUPINFO sInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo;
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL;
sInfo.hStdOutput=wPipe;
sInfo.hStdError=wPipe;
char command[1024];
strcpy(command,csExecute.GetBuffer(csExecute.GetLength()));
//Create the process here.
CreateProcess(0,command,0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
CloseHandle(wPipe);
//now read the output pipe here.
char buf[100];
DWORD reDword;
CString m_csOutput,csTemp;
BOOL res;
do
{
res=::ReadFile(rPipe,buf,100,&reDword,0);
csTemp=buf;
m_csOutput+=csTemp.Left(reDword);
}while(res);
CloseHandle( pInfo.hProcess );
CloseHandle( pInfo.hThread );
return m_csOutput;
}