21xrx.com
2025-03-26 15:45:16 Wednesday
文章检索 我的文章 写文章
如何使用C++调用EXE并获取其输出
2023-07-11 03:20:40 深夜i     185     0
C++ 调用 EXE 获取输出

如果想要使用C++来调用一个外部的可执行文件并获取它的输出结果,你可以使用Windows API中的CreateProcess()函数。在这个函数中,你需要指定可执行文件的路径,并使用一些参数来定义它的行为,比如你可以定义它的工作目录、标准输入输出流等等。

一旦你成功创建了这个进程,你可以使用Windows API中的ReadFile()函数来读取它的输出。当你要读取它的输出时,你需要使用句柄(该句柄是在CreateProcess()函数中返回的),并创建一个缓冲区来存储来自进程的数据。

请注意,由于该进程会异步地生成输出,因此你需要重复执行ReadFile()函数,直到读取完整个输出,并且可以根据进程的返回值确定进程的执行结果。如果进程执行成功,则返回0,否则返回一个非零的错误代码。

以下是一个简单的例子,演示了如何使用C++来调用一个可执行文件并打印出它的输出:

#include <windows.h>
#include <stdio.h>
int main()
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  char cmdLine[] = "<your_executable> <command_line_arguments>";
  char outputBuffer[1024];
  DWORD bytesRead;
  BOOL bSuccess;
  ZeroMemory(&si, sizeof(si));
  si.cb = sizeof(si);
  ZeroMemory(&pi, sizeof(pi));
  bSuccess = CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
  if (!bSuccess)
  {
    printf("Error creating process: %d\n", GetLastError());
    return 1;
  }
  bSuccess = ReadFile(pi.hProcess, outputBuffer, sizeof(outputBuffer) - 1, &bytesRead, NULL);
  while (bSuccess && bytesRead != 0)
  {
    outputBuffer[bytesRead] = '\0';
    printf("%s", outputBuffer);
    bSuccess = ReadFile(pi.hProcess, outputBuffer, sizeof(outputBuffer) - 1, &bytesRead, NULL);
  }
  DWORD exitCode;
  GetExitCodeProcess(pi.hProcess, &exitCode);
  printf("\n\nProcess exited with code %d\n", exitCode);
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
  return exitCode;
}

在这个例子中,你需要将` `和` `替换成你所需的可执行文件和命令行参数。当运行程序时,你可以在控制台上看到该进程的所有输出,并且在进程结束时,将会输出其返回值。

  
  

评论区

    相似文章
请求出错了