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

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, UTF-8).


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.

Reply via email to