Thread overview
static constructor not working with WinMain GUI app
Nov 23, 2010
Andrej Mitrovic
Nov 23, 2010
Simen kjaeraas
Nov 24, 2010
Andrej Mitrovic
Nov 24, 2010
Andrej Mitrovic
Nov 23, 2010
Michal Minich
November 23, 2010
maintest.def:
EXETYPE NT
SUBSYSTEM WINDOWS

maintest.d:
http://pastebin.com/3c4CKDG1

Compiled with DMD 2.050: dmd maintest.d maintest.def

The output in the log file is "Lenght: 0". The static constructor is never called when using WinMain.

But if I use a normal "void main()" function instead of WinMain, then the static constructor does get called. Here's a working example that tests a GUI dialogbox and outputs "Length: 4" in the log file:

maintest.def:
EXETYPE NT
SUBSYSTEM WINDOWS

maintest.d:
http://pastebin.com/3UDKmxJ1

dmd maintest.d maintest.def

This looks like a bug to me..
November 23, 2010
Andrej Mitrovic <none@none.none> wrote:

> maintest.def:
> EXETYPE NT
> SUBSYSTEM WINDOWS
>
> maintest.d:
> http://pastebin.com/3c4CKDG1
>
> Compiled with DMD 2.050:
> dmd maintest.d maintest.def
>
> The output in the log file is "Lenght: 0". The static constructor is never called when using WinMain.
>
> But if I use a normal "void main()" function instead of WinMain, then the static constructor does get called. Here's a working example that tests a GUI dialogbox and outputs "Length: 4" in the log file:
>
> maintest.def:
> EXETYPE NT
> SUBSYSTEM WINDOWS
>
> maintest.d:
> http://pastebin.com/3UDKmxJ1
>
> dmd maintest.d maintest.def
>
> This looks like a bug to me..

Looking at http://digitalmars.com/d/2.0/windows.html, it seems your
template for WinMain is outdated.

You should use the template on that page, but beware that
exceptionHandler should take a Throwable, not an Exception, like the
example says. This error is reported:
http://d.puremagic.com/issues/show_bug.cgi?id=5261

-- 
Simen
November 23, 2010
On Tue, 23 Nov 2010 15:23:12 -0500, Andrej Mitrovic wrote:

> The static constructor is never called when using WinMain.

Make sure you use newest DMD, I think in 2.048 or 49 there was bug that module constructors were not called.

November 24, 2010
This means the windows sample code that comes with DMD in the samples folder has to be updated, that's where I took the template from.

Thanks.

On 11/23/10, Simen kjaeraas <simen.kjaras@gmail.com> wrote:
> Andrej Mitrovic <none@none.none> wrote:
>
>> maintest.def:
>> EXETYPE NT
>> SUBSYSTEM WINDOWS
>>
>> maintest.d:
>> http://pastebin.com/3c4CKDG1
>>
>> Compiled with DMD 2.050:
>> dmd maintest.d maintest.def
>>
>> The output in the log file is "Lenght: 0". The static constructor is never called when using WinMain.
>>
>> But if I use a normal "void main()" function instead of WinMain, then the static constructor does get called. Here's a working example that tests a GUI dialogbox and outputs "Length: 4" in the log file:
>>
>> maintest.def:
>> EXETYPE NT
>> SUBSYSTEM WINDOWS
>>
>> maintest.d:
>> http://pastebin.com/3UDKmxJ1
>>
>> dmd maintest.d maintest.def
>>
>> This looks like a bug to me..
>
> Looking at http://digitalmars.com/d/2.0/windows.html, it seems your template for WinMain is outdated.
>
> You should use the template on that page, but beware that exceptionHandler should take a Throwable, not an Exception, like the example says. This error is reported: http://d.puremagic.com/issues/show_bug.cgi?id=5261
>
> --
> Simen
>
November 24, 2010
Ok I've filed a bug report and the fix: http://d.puremagic.com/issues/show_bug.cgi?id=5268

On 11/24/10, Andrej Mitrovic <andrej.mitrovich@gmail.com> wrote:
> This means the windows sample code that comes with DMD in the samples folder has to be updated, that's where I took the template from.
>
> Thanks.
>
> On 11/23/10, Simen kjaeraas <simen.kjaras@gmail.com> wrote:
>> Andrej Mitrovic <none@none.none> wrote:
>>
>>> maintest.def:
>>> EXETYPE NT
>>> SUBSYSTEM WINDOWS
>>>
>>> maintest.d:
>>> http://pastebin.com/3c4CKDG1
>>>
>>> Compiled with DMD 2.050:
>>> dmd maintest.d maintest.def
>>>
>>> The output in the log file is "Lenght: 0". The static constructor is never called when using WinMain.
>>>
>>> But if I use a normal "void main()" function instead of WinMain, then the static constructor does get called. Here's a working example that tests a GUI dialogbox and outputs "Length: 4" in the log file:
>>>
>>> maintest.def:
>>> EXETYPE NT
>>> SUBSYSTEM WINDOWS
>>>
>>> maintest.d:
>>> http://pastebin.com/3UDKmxJ1
>>>
>>> dmd maintest.d maintest.def
>>>
>>> This looks like a bug to me..
>>
>> Looking at http://digitalmars.com/d/2.0/windows.html, it seems your template for WinMain is outdated.
>>
>> You should use the template on that page, but beware that exceptionHandler should take a Throwable, not an Exception, like the example says. This error is reported: http://d.puremagic.com/issues/show_bug.cgi?id=5261
>>
>> --
>> Simen
>>
>