Get Compile Errors - Command Line
Adam D. Ruppe
destructionator at gmail.com
Sat Mar 15 15:48:51 PDT 2014
On Saturday, 15 March 2014 at 19:11:38 UTC, Bauss wrote:
> Note I am not typing the arguments, but rather starting the
> process.
Skip to the bottom of this message if you are doing it in D and
don't care how it is done in the lower level api.
The CreateProcess API call takes a STARTUPINFO argument which has
handles you can use to redirect the output. 2>somefile.txt in
cmd.exe does something like this:
HANDLE hFile = CreateFile("somefile.txt", GENERIC_WRITE, 0, null,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, null);
if(hFile == INVALID_HANDLE_VALUE) throw new Exception("couldn't
open file");
scope(exit) CloseHandle(hFile);
STARTUPINFO si;
si.cb = si.sizeof;
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdError = hFile; // redirect to our file
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
// Now, we'll create the process with the file set up and wait
for it to finish
PROCESS_INFORMATION pi;
if(CreateProcessA("dmd.exe", "dmd.exe yourfile.d", null, null,
true, 0, null, null, &si, &pi) == 0)
throw new Exception("createProcess failed");
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
// At this point, we could check out somefile.txt to see what is
there
Of course, if we wanted to see the content in our program,
instead of going through a regular file, we could use
CreatePipe() to make a pair, passing the write handle to it as
the hStdOutput, then reading from the read side to collect all
the program's output in memory.
There's similar Posix functions if you want to do this kind of
thing on linux, etc., too.
If you're writing this program in D, the standard library
contains a nice little function to make this a lot shorter:
http://dlang.org/phobos/std_process.html#.execute
the example there calls dmd too! So if you wanna try it from D,
copy/paste that example and it should get you started.
More information about the Digitalmars-d-learn
mailing list