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