Using stdin/out in a windows application bugs only when compiled to 64bit.

realhet real_het at hotmail.com
Thu Jun 7 23:16:33 UTC 2018


On Thursday, 7 June 2018 at 19:42:05 UTC, Steven Schveighoffer 
wrote:
> Are you just compiling the 32-bit dmd version with default 
> flags?
Yes, no flags at all and it defaults to a 32bit target. I can use 
the console and able to make windows, and able to setup an opengl 
window too.
The console (stdin/stdout/SetConsoleAttribute) stuff crashes only 
when I compile to 64bit with DMD or to 32/64 with LDC.

> If so, it's likely an issue with MSVC runtime library not being 
> properly set up. DMD 32 bit by default uses DMC runtime.
I just tried to put up msvcrt2017 runtime but doesnt solved the 
issue.

> To verify, use the switch -m32mscoff to do 32-bit result but 
> link against MSVC library.
Compiling this way is impossible: It can't link even basic stuff 
like GetDC().

>> I know this isn't really an answer, but it at least narrows it
> down. Been a while since I did windows development, but it 
> sounds like you are trying to print to or read from a console 
> that isn't open. A windows program that has gui-only flag 
> doesn't by default allocate a console. Most likely dmc just 
> does it for you.

To be honest I don't use gui-only flag as I don't even know about 
where to put it :D (.def file maybe, but I don't). I use 
core.Runtime.initialize only. That is enough in 32bit but not in 
64bit.

My goal is to have a fully functional exe that contains every 
necessary things inside it. So far this is given when I use DMD 
and compile to win32.
The error I'm getting is not a 'friendly' exception. It is a 
privileged instruction crash.
And it caused only by adding the -m64 option, not changing 
anything else. The linking is done by DMD itself also. (If I link 
with msvcenv.bat && MSLink.exe, it produces also the same fail.)


More information about the Digitalmars-d-learn mailing list