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