Get Compile Errors - Command Line

Bauss streetzproductionz at hotmail.com
Sun Mar 16 06:57:40 PDT 2014


On Saturday, 15 March 2014 at 22:48:52 UTC, Adam D. Ruppe wrote:
> 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.

Actually I was doing it through C#. I have tried getting the 
output of the window but it doesn't seem to redirect it.


More information about the Digitalmars-d-learn mailing list