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