win64 DLL stdout printing after main process completes
cc
cc at nevernet.com
Mon Apr 26 14:44:53 UTC 2021
On Monday, 26 April 2021 at 13:44:19 UTC, frame wrote:
> On Sunday, 25 April 2021 at 15:01:25 UTC, cc wrote:
>
>> Adding a note in case anyone stumbles across this with a
>> similar problem:
>> Adding `stdout.setvbuf(0, _IONBF);` to both the main and DLL
>> will cause D to autoflush after every write call without
>> requiring a manual flush (which seems to happen quite often
>> when running under anything other than a basic Windows command
>> prompt).
>
> I cannot reproduce this on Windows 10. It would be just
> interesting to know your compiler version and OS and if you
> have installed any Visual Studio tools or Visual C runtimes,
> thanks.
Win10 64-bit
DMD32 D Compiler v2.096.0-dirty
Sublime Text 3.1.1 Build 3176
Visual Studio 2019 is installed, as well as... quite a few
runtimes, multiple for Visual C++ 2005, 2008, 2010, 2012, 2013,
2015-2019.
The buffering also happens under cygwin shells (I'm not building
with cygwin, I just like using their bash shell). If I run a D
program through the basic cmd.exe, it runs with no stdout
buffering. However any other situation (shell, sublime
build+output capture, etc) buffering somehow gets enabled, unless
I explicitly disable it in code or wrap the write* functions with
stdout.flush() wrappers. This has happened for me for many
versions of the dmd compiler stretching back years, building both
32-bit and 64-bit executables.
More information about the Digitalmars-d-learn
mailing list