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.

Reply via email to