I'm trying to make a program that launches the compiler and present its information (and later, some useful information on the errors) to the user in a pretty way. The first step would be to have a solution similar to 4coder's: The user presses a button and a program is compiled and the compilation information is displayed on the main program.
Based on the day 192's self-recompiling code, I could easily launch a process and compile a program using CreateProcess:
1 | CreateProcess(command, command_line, 0, 0, FALSE, 0, 0, path, &startup_info, &process_info); |
After some research I could direct the process' output to a file handle using the hStdOutput member of the STARTUPINFO struct.
Here are the most important points of the code.
1 | HANDLE h = CreateFile("out.log", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); |
1 2 3 4 5 | si.cb = sizeof(STARTUPINFO); si.dwFlags |= STARTF_USESTDHANDLES; si.hStdInput = NULL; si.hStdError = h; si.hStdOutput = h; |
However, the objective is to interactively show the result like 4coder, so I would have to have it in a char buffer or something. Yeah, I could read the file but that seems really janky and slow.
Is there any way to capture the output of the child's process in a memory buffer of some sort so that I could display and analyze it however I want? It seems there are a lot of programs that do this, what is the best way to achieve it?
Thank you (and have a happy 2019) :),
Dan Zaidan