How to force console

Simen Kjærås simen.kjaras at gmail.com
Thu Aug 2 13:02:21 UTC 2018


On Thursday, 2 August 2018 at 12:08:50 UTC, Everlast wrote:
> On Thursday, 2 August 2018 at 03:20:30 UTC, Mike Parker wrote:
>> On Wednesday, 1 August 2018 at 20:57:30 UTC, Everlast wrote:
>>> I can create a console for a dll using AllocConsole and 
>>> special Write functions but this is a pain. How do I get all 
>>> standard input and output to either use this console or for 
>>> the app to create the console automatically?
>>>
>>> The problem I'm having is that I can write(using custom 
>>> write) but can't read. I'd rather just have a dll with a 
>>> normal console window like a normal program.
>>>
>>> I do have `-L/SUBSYSTEM:CONSOLE`
>>>
>>> but no console appears.
>>
>> As far as I know, that only works with executables. Loading a 
>> DLL does not trigger the opening of a console. You'll have to 
>> stick with AllocConsole and redirect the I/O.
>>
>> http://www.asawicki.info/news_1326_redirecting_standard_io_to_windows_console.html
>
> Thanks, but does that work in D?
>
> Error: cannot cast expression `*fp` of type `shared(_iobuf)` to 
> `File*`

I tried getting it to work, gave up, and found some example code 
that I boiled down to this:

import std.stdio : writeln, stdout;
AllocConsole();
freopen("CON", "w", stdout.getFP);
writeln("OHAI!");

That works on my machine, but I haven't read enough to know why 
it wouldn't fail on others.

--
   Simen


More information about the Digitalmars-d-learn mailing list