newbie - hey walter, improvement potentials for installer

Walter Bright newshound2 at
Tue Feb 14 14:16:38 PST 2012

On 2/14/2012 11:45 AM, Alf P. Steinbach wrote:
> On 13.02.2012 20:13, Walter Bright wrote:
>> Hi Alf! Welcome!
> Thanks.
>> On 2/12/2012 4:02 PM, Alf P. Steinbach wrote:
> [snip]
>>> * Improvement potential #5 -- The description of Windows prog.
>>> Following main site's links to
>>> [],
>>> I found a real monstrosity as an example of purportedly simplest possible
>>> Windows GUI program. It's almost funny. Here is mine:
>>> <code>
>>> import;
>>> void main()
>>> {
>>> MessageBoxW( null, "Text", "Caption", MB_OK | MB_ICONINFORMATION );
>>> }
>>> </code>
> [Just in passing, a practical tip: in Thunderbird (which you're using),
> selecting all the text before hitting "Reply" prevents TB from removing indents
> from code. They added the remove-indents behavior in version 2. Nobody expects
> it, for why on Earth should it do that?, but it does.]
>>> And here is how I built it:
>>> <example>
>>> [d:\dev\test\d]
>>> > dmd minimal_gui.d -L-subsystem:windows
>>> [d:\dev\test\d]
>>> > dumpbin /headers minimal_gui.exe | find /i "sub"
>>> 3.10 subsystem version
>>> 2 subsystem (Windows GUI)
>>> [d:\dev\test\d]
>>> > minimal.d
>>> </example>
>>> Maybe with DMD tools something potentially bad happens here. However,
>>> with
>>> extant C++ compilers (and even old Borland C++ 5.5) this way of doing
>>> things
>>> works splendidly. So here is a definite improvement potential for the
>>> web site
>>> page with the monstrous code, and if the current tools don't handle it
>>> well,
>>> also for the the toolset. :-)
>> Good point, the Windows examples get less love than the other stuff.
> He he.
>> On
>> the other hand, I don't think a simple main()/MessageBoxW() program
>> scales as a first program. It needs to be a WinMain(), and it needs to
>> show how to get a classic GUI program started up and shut down. The user
>> can then start hanging flesh on it for his own purposes.
> Oh, that's just Microsoft propaganda-by-example.
> In C and C++ the non-standard Microsoft specific WinMain startup function
> technically only makes the programs formally incorrect for a hosted
> implementation, and in practice it serves to make people accept also other
> Microsoft lock-in things blindly, without questioning.
> People are tricked into believing that this Microsoft standard-breaking thing is
> needed because all Microsoft examples use it, and because Microsoft's toolchain
> (but not e.g. the GNU toolchain) won't accept a standard `main` for a GUI
> subsystem program, without use of not very well documented options (MSVC linker
> option "/entry:mainCRTStartup").
> In D, if the example code given on the D site is correct apart from the result
> value bug, WinMain requires a lot of ugly boiler-plate code. Re the bug, it's
> duplicated in the VisualD starter code for a new console project, so such
> boiler-plate code is definitely undesirable... So, on the Bright side, this is a
> real improvement opportunity :-).

Yes, unfortunately, I am not an expert at Windows event loop GUI programming, 
and so I am unsure of the right way to do this. So I fell back on the standard way.

> But if those D signatures include one with a set of Unicode arguments, then all
> is super-duper, and if not, then one must just do in D what one must do in C and
> C++ for a real and standard-conforming program, namely to use the Windows API to
> retrieve the arguments (if necessary).

In D, the main(string[] args) are supposed to be in Unicode (more specifically, 

> I once, as a college lecturer, used to quip that one learns as long as one has
> students... ;-)

And the old but true corollary, the best way to learn something is to try and 
teach it to others.

More information about the Digitalmars-d mailing list