On Wednesday, 29 April 2020 at 10:12:29 UTC, Mike Parker wrote:
Most likely because you're calling writeln before initializing
the runtime.
Of course, that was it, thanks for the help Mike!
Also, when using WinMain, you aren't going to see any output
from writeln because you won't have a console window. The
linker will create a "Windows subsystem" app rather than a
"Console subsystem".
Thanks again, you're right, I didn't realize that would be the
case.
Really, there's no reason at all to use WinMain. Just create a
standard main function. Then you don't need to worry about
manually initializing the runtime and you'll have a console
window by default. You can always turn it off in anything you
want to ship without the console by adding the appropriate
dflags to your dub file:
-L/SUBSYSTEM:WINDOWS -L/ENTRY:mainCRTStartup
Conversely, you can get the console window in a WinMain app
with:
-L/SUBSYSTEM:CONSOLE -L/ENTRY:WinMainCRTStartup
Though, again, there's really no reason to use WinMain.
I took the WinMain from https://wiki.dlang.org/D_for_Win32,
should that documentation be updated to use a normal main
function instead? Also the details regarding linker flags may be
a good addition to that wiki page.