21xrx.com
2024-12-22 21:03:04 Sunday
登录
文章检索 我的文章 写文章
如何使用C++调用EXE并获取其输出
2023-07-11 03:20:40 深夜i     --     --
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;

}

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复