digitalmars.D - make D windows-aware
- Jarrett Billingsley (11/11) Mar 22 2006 DMD is Windows-aware in the sense that if you have a WinMain(), it emits...
- Sean Kelly (4/10) Mar 22 2006 This thread seems pertinent:
- Jarrett Billingsley (4/7) Mar 22 2006 I'll try that, though it makes it a bit awkward to get the hInstance
- Chris Miller (3/12) Mar 22 2006 Can just use GetModuleHandleA(null)
- Jarrett Billingsley (6/7) Mar 22 2006 Why thank you. I was wondering if there was an API call to get that.
- Regan Heath (9/17) Mar 22 2006 Can you catch them all in WinMain i.e.
- Jarrett Billingsley (22/28) Mar 22 2006 If I use the method proposed by Sean, I'd have to catch the exceptions i...
- kris (6/42) Mar 22 2006 You might ask Sean to decouple the default exception-handler from the
- Jarrett Billingsley (3/8) Mar 22 2006 Not using Ares, sorry.
- Hasan Aljudy (2/40) Mar 22 2006 I think you can use the new scope(failure) construct!
- Jarrett Billingsley (4/5) Mar 22 2006 I had a fleeting thought about that, then realized that scope(failure)
- Regan Heath (25/56) Mar 22 2006 Yeah, though if you add 1 more layer, i.e.
- Jarrett Billingsley (3/5) Mar 22 2006 Well then.. :)
- Sean Kelly (19/28) Mar 22 2006 Why not catch all exceptions in main, display them as appropriate, and
- Jarrett Billingsley (10/15) Mar 22 2006 Because that's ugly ;)
- Chris Miller (6/20) Mar 22 2006 I just always use a D main and tell the linker what type of exe to make ...
DMD is Windows-aware in the sense that if you have a WinMain(), it emits a reference to acrtused or whatever, but what I mean is make it so we don't have to manually put all the D init / deinit code in the WinMain(). I mean, when we define main() for a console program, it automatically calls dmain() which calls main(). Why not make it so when we define WinMain(), it automatically calls DWinMain() before our WinMain() or something? I can only see this as an advantage, as well, as then any fancy things Walter puts into dmain (like exception stack traces and just exception handling in general) will be put into DWinMain as well, instead of the "WinMain" living in (of all places) the docs and having to be copied into any Windows programs.
Mar 22 2006
Jarrett Billingsley wrote:DMD is Windows-aware in the sense that if you have a WinMain(), it emits a reference to acrtused or whatever, but what I mean is make it so we don't have to manually put all the D init / deinit code in the WinMain(). I mean, when we define main() for a console program, it automatically calls dmain() which calls main(). Why not make it so when we define WinMain(), it automatically calls DWinMain() before our WinMain() or something?This thread seems pertinent: http://www.digitalmars.com/d/archives/digitalmars/D/learn/1815.html Sean
Mar 22 2006
"Sean Kelly" <sean f4.ca> wrote in message news:dvsgih$1rhe$1 digitaldaemon.com...This thread seems pertinent: http://www.digitalmars.com/d/archives/digitalmars/D/learn/1815.html SeanI'll try that, though it makes it a bit awkward to get the hInstance parameter which I need.
Mar 22 2006
On Wed, 22 Mar 2006 19:34:19 -0500, Jarrett Billingsley <kb3ctd2 yahoo.com> wrote:"Sean Kelly" <sean f4.ca> wrote in message news:dvsgih$1rhe$1 digitaldaemon.com...Can just use GetModuleHandleA(null)This thread seems pertinent: http://www.digitalmars.com/d/archives/digitalmars/D/learn/1815.html SeanI'll try that, though it makes it a bit awkward to get the hInstance parameter which I need.
Mar 22 2006
"Chris Miller" <chris dprogramming.com> wrote in message news:op.s6uctr1mpo9bzi moe...Can just use GetModuleHandleA(null)Why thank you. I was wondering if there was an API call to get that. Now the only problem is that exceptions are displayed on the command line instead of popping up.. which may be a problem for the other programmers in my little group..
Mar 22 2006
On Wed, 22 Mar 2006 20:27:04 -0500, Jarrett Billingsley <kb3ctd2 yahoo.com> wrote:"Chris Miller" <chris dprogramming.com> wrote in message news:op.s6uctr1mpo9bzi moe...Can you catch them all in WinMain i.e. try { ..main.. } catch(Object o) { MessageBox(... } ReganCan just use GetModuleHandleA(null)Why thank you. I was wondering if there was an API call to get that. Now the only problem is that exceptions are displayed on the command line instead of popping up.. which may be a problem for the other programmers in my little group..
Mar 22 2006
"Regan Heath" <regan netwin.co.nz> wrote in message news:ops6uelhqc23k2f5 nrage.netwin.co.nz...Can you catch them all in WinMain i.e. try { ..main.. } catch(Object o) { MessageBox(... }If I use the method proposed by Sean, I'd have to catch the exceptions in my own main function, as the dmain catches them and prints them to the console. i.e. extern(C) main(..) int WinMain(..) { return main(1, &cmdline); } void main() { try { crap } catch(Exception e) { MessageBox("oh man" ~ e.toString()); } } Pretty ugly.
Mar 22 2006
Jarrett Billingsley wrote:"Regan Heath" <regan netwin.co.nz> wrote in message news:ops6uelhqc23k2f5 nrage.netwin.co.nz...You might ask Sean to decouple the default exception-handler from the runtime support in Ares. The idea would be that you could provide your own default-handler, and then the linker would bind that instead. Sean is already doing a lot of things like that with Ares, so it may not be too much of a stretch.Can you catch them all in WinMain i.e. try { ..main.. } catch(Object o) { MessageBox(... }If I use the method proposed by Sean, I'd have to catch the exceptions in my own main function, as the dmain catches them and prints them to the console. i.e. extern(C) main(..) int WinMain(..) { return main(1, &cmdline); } void main() { try { crap } catch(Exception e) { MessageBox("oh man" ~ e.toString()); } } Pretty ugly.
Mar 22 2006
"kris" <foo bar.com> wrote in message news:dvsum5$2du4$1 digitaldaemon.com...You might ask Sean to decouple the default exception-handler from the runtime support in Ares. The idea would be that you could provide your own default-handler, and then the linker would bind that instead. Sean is already doing a lot of things like that with Ares, so it may not be too much of a stretch.Not using Ares, sorry.
Mar 22 2006
Jarrett Billingsley wrote:"Regan Heath" <regan netwin.co.nz> wrote in message news:ops6uelhqc23k2f5 nrage.netwin.co.nz...I think you can use the new scope(failure) construct!Can you catch them all in WinMain i.e. try { ..main.. } catch(Object o) { MessageBox(... }If I use the method proposed by Sean, I'd have to catch the exceptions in my own main function, as the dmain catches them and prints them to the console. i.e. extern(C) main(..) int WinMain(..) { return main(1, &cmdline); } void main() { try { crap } catch(Exception e) { MessageBox("oh man" ~ e.toString()); } } Pretty ugly.
Mar 22 2006
"Hasan Aljudy" <hasan.aljudy gmail.com> wrote in message news:dvsvif$2f4p$1 digitaldaemon.com...I think you can use the new scope(failure) construct!I had a fleeting thought about that, then realized that scope(failure) doesn't let you actually catch the offending exception.
Mar 22 2006
On Wed, 22 Mar 2006 20:42:57 -0500, Jarrett Billingsley <kb3ctd2 yahoo.com> wrote:"Regan Heath" <regan netwin.co.nz> wrote in message news:ops6uelhqc23k2f5 nrage.netwin.co.nz...Yeah, though if you add 1 more layer, i.e. extern(C) main(..) int WinMain(..) { return main(1, &cmdline); } void main() { try { real_main(); } catch(Exception e) { MessageBox("oh man" ~ e.toString()); } } void real_main() { ..crap.. } it's not so bad. ReganCan you catch them all in WinMain i.e. try { ..main.. } catch(Object o) { MessageBox(... }If I use the method proposed by Sean, I'd have to catch the exceptions in my own main function, as the dmain catches them and prints them to the console. i.e. extern(C) main(..) int WinMain(..) { return main(1, &cmdline); } void main() { try { crap } catch(Exception e) { MessageBox("oh man" ~ e.toString()); } } Pretty ugly.
Mar 22 2006
"Regan Heath" <regan netwin.co.nz> wrote in message news:ops6uf9kzv23k2f5 nrage.netwin.co.nz...Yeah, though if you add 1 more layer, i.e. it's not so bad.Well then.. :)
Mar 22 2006
Jarrett Billingsley wrote:"Chris Miller" <chris dprogramming.com> wrote in message news:op.s6uctr1mpo9bzi moe...Why not catch all exceptions in main, display them as appropriate, and then rethrow: void main( char[][] args ) { try { ... } catch( Exception e ) { // display dialog throw e; } catch( Object o ) { // display dialog } } Passing exceptions completely through the runtime would be a bit weird, as by the time the exception reached WinMain module dtors would have been called, the GC would have been terminated, etc. SeanCan just use GetModuleHandleA(null)Why thank you. I was wondering if there was an API call to get that. Now the only problem is that exceptions are displayed on the command line instead of popping up.. which may be a problem for the other programmers in my little group..
Mar 22 2006
"Sean Kelly" <sean f4.ca> wrote in message news:dvt5j1$2n35$1 digitaldaemon.com...Why not catch all exceptions in main, display them as appropriate, and then rethrow:Because that's ugly ;) Seriously, though, I'm working with some more novice programmers, and I want to make this as easy as possible for them. So I'd like to be able to say "just put everything in this function and don't worry about it." I think the extra layer of main like Regan suggested is what I'll do.Passing exceptions completely through the runtime would be a bit weird, as by the time the exception reached WinMain module dtors would have been called, the GC would have been terminated, etc.They'd never make it all the way back to WinMain; they get caught by dmain and printed to the console. It's a consequence of dmain being meant for console apps.
Mar 22 2006
On Wed, 22 Mar 2006 14:30:29 -0500, Jarrett Billingsley <kb3ctd2 yahoo.com> wrote:DMD is Windows-aware in the sense that if you have a WinMain(), it emits a reference to acrtused or whatever, but what I mean is make it so we don't have to manually put all the D init / deinit code in the WinMain(). I mean, when we define main() for a console program, it automatically calls dmain() which calls main(). Why not make it so when we define WinMain(), it automatically calls DWinMain() before our WinMain() or something? I can only see this as an advantage, as well, as then any fancy things Walter puts into dmain (like exception stack traces and just exception handling in general) will be put into DWinMain as well, instead of the "WinMain" living in (of all places) the docs and having to be copied into any Windows programs.I just always use a D main and tell the linker what type of exe to make (pass -L/exet:nt/su:windows:4.0 or similar to DMD). I think this is how it always should have been. This lets you use D main char[][]args and/or WinMain args via GetCommandLine().
Mar 22 2006