How to force console

Everlast Everlast at For.Ever
Thu Aug 2 13:11:20 UTC 2018


On Thursday, 2 August 2018 at 13:02:21 UTC, Simen Kjærås wrote:
> 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

Thanks, seems to work. I have to do input too, hopefully it is as 
simple, as this seems to work:

	freopen("CON", "r", stdin.getFP);

But, when I put this stuff in a static this in a windowsx64 dll, 
the static this is called about 100 times!!! Not once!



More information about the Digitalmars-d-learn mailing list