digitalmars.D.learn - How to force console
- Everlast (9/9) Aug 01 2018 I can create a console for a dll using AllocConsole and special
- Mike Parker (5/14) Aug 01 2018 As far as I know, that only works with executables. Loading a DLL
- Everlast (4/21) Aug 02 2018 Thanks, but does that work in D?
- Simen =?UTF-8?B?S2rDpnLDpXM=?= (11/34) Aug 02 2018 I tried getting it to work, gave up, and found some example code
- Everlast (6/42) Aug 02 2018 Thanks, seems to work. I have to do input too, hopefully it is as
- Adam D. Ruppe (8/10) Aug 02 2018 try
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.
Aug 01 2018
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
Aug 01 2018
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:Thanks, but does that work in D? Error: cannot cast expression `*fp` of type `shared(_iobuf)` to `File*`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
Aug 02 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: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. -- SimenOn Wednesday, 1 August 2018 at 20:57:30 UTC, Everlast wrote:Thanks, but does that work in D? Error: cannot cast expression `*fp` of type `shared(_iobuf)` to `File*`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
Aug 02 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: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!On Thursday, 2 August 2018 at 03:20:30 UTC, Mike Parker wrote: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. -- SimenOn Wednesday, 1 August 2018 at 20:57:30 UTC, Everlast wrote:Thanks, but does that work in D? Error: cannot cast expression `*fp` of type `shared(_iobuf)` to `File*`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
Aug 02 2018
On Thursday, 2 August 2018 at 13:11:20 UTC, Everlast wrote:But, when I put this stuff in a static this in a windowsx64 dll, the static this is called about 100 times!!! Not once!try shared static this() instead of just static this() the latter is called once per thread, the former once per process. that might be the difference. maybe. 100 times still seems crazy.
Aug 02 2018