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