newbie - hey walter, improvement potentials for installer

Alf P. Steinbach alf.p.steinbach+usenet at gmail.com
Tue Feb 14 11:45:41 PST 2012


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
>> [http://d-programming-language.org/windows.html],
>> I found a real monstrosity as an example of purportedly simplest possible
>> Windows GUI program. It's almost funny. Here is mine:
>>
>> <code>
>> import std.c.windows.windows;
>>
>> 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 :-).

The main problem (pun not intended) in C and C++ is that neither 
standard `main` nor non-standard Microsoft `WinMain` provide the command 
line arguments in Unicode. Standard `main` has `char` arguments, by 
Windows convention encoded in Windows ANSI, which generally means data 
loss and e.g. that some file names can't be passed. Microsoft `WinMain` 
provides the arguments part of the command line, in Unicode, but not 
split up into individual arguments.

I do not yet know the valid signatures for a D standard `main`.

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).


>> - Alf (at very beginning of checking out the D language)
>
> Thanks for taking the time to post these first experiences. It's often
> hard for use to see the picture in the way a new user does.

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


Cheers & hth.,

- Alf


More information about the Digitalmars-d mailing list