D - Windows app crashes on exit
- Stewart Gordon (119/119) Jan 14 2004 Using DMD 0.77, Windows 98SE.
-
Stewart Gordon
(11/17)
Jan 15 2004
Using DMD 0.77, Windows 98SE. I'm experimenting with writing a Windows application framework rather in the style of Borland OWL. The code below is a simplification of this. The base version (i.e. no -version compiler switch) runs without any trouble. Version 1 is, of course, supposed to make multiple windows (and, of course, dialogs) possible. It still manages to do nothing without any trouble. However, as soon as I close it, I get an illegal operation error: WINTEST caused an invalid page fault in module KERNEL32.DLL at 0167:bff8ac13. I can't for the life of me figure why this is happening. What is going on here? Any idea how to fix it? Stewart. ---------- import std.c.windows.windows; version (1) { Window[HWND] windowList; Window newWindow; extern(Windows) int WindowProc(HWND hWnd, uint uMsg, WPARAM wParam, LPARAM lParam) { Window w; if (!(hWnd in windowList)) { windowList[hWnd] = w = newWindow; newWindow = null; } else { w = windowList[hWnd]; } return w.processMessage(hWnd, uMsg, wParam, lParam); } } else { Window w; extern(Windows) int WindowProc(HWND hWnd, uint uMsg, WPARAM wParam, LPARAM lParam) { return w.processMessage(hWnd, uMsg, wParam, lParam); } } class Window { int processMessage(HWND hWnd, uint uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); break; default: break; } return DefWindowProcA(hWnd, uMsg, wParam, lParam); } int run() { HINSTANCE hInst = GetModuleHandleA(null); WNDCLASS wc; wc.lpszClassName = "DWndClass"; wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = &WindowProc; wc.hInstance = hInst; wc.hIcon = LoadIconA(cast(HINSTANCE) null, IDI_APPLICATION); wc.hCursor = LoadCursorA(cast(HINSTANCE) null, cast(LPSTR) 32512); wc.hbrBackground = cast(HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = null; wc.cbClsExtra = wc.cbWndExtra = 0; assert(RegisterClassA(&wc)); HWND hWnd; version(1) { synchronized { newWindow = this; hWnd = CreateWindowA("DWndClass", "Just a window", WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, HWND_DESKTOP, cast(HMENU) null, hInst, null); } } else { hWnd = CreateWindowA("DWndClass", "Just a window", WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, HWND_DESKTOP, cast(HMENU) null, hInst, null); } assert(hWnd); MSG msg; while (GetMessageA(&msg, cast(HWND) null, 0, 0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } return 1; } } int doit() { version (1) { Window w; } w = new Window; return w.run(); } extern (C) void gc_init(); extern (C) void gc_term(); extern (C) void _minit(); extern (C) void _moduleCtor(); extern (C) void _moduleUnitTests(); extern (Windows) int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int result; gc_init(); // initialize garbage collector _minit(); // initialize module constructor table try { _moduleCtor(); // call module constructors _moduleUnitTests(); // run unit tests (optional) result = doit(); // insert user code here } catch (Object o) { // catch any uncaught exceptions MessageBoxA(null, (char *)o.toString(), "Runtime Error", MB_OK | MB_ICONEXCLAMATION); result = 0; // failed } gc_term(); // run finalizers; terminate garbage collector return result; } -- My e-mail is valid but not my primary mailbox, aside from its being the unfortunate victim of intensive mail-bombing at the moment. Please keep replies on the 'group where everyone may benefit.
Jan 14 2004
While it was 14/1/04 1:30 pm throughout the UK, Stewart Gordon sprinkled little black dots on a white screen, and they fell thus:Using DMD 0.77, Windows 98SE.<snip>WINTEST caused an invalid page fault in module KERNEL32.DLL at 0167:bff8ac13. I can't for the life of me figure why this is happening. What is going on here? Any idea how to fix it?<snip> Well if nobody's found the solution, it seems I've found it. Just upgraded to DMD 0.78 and it seems to work now. Stewart. -- My e-mail is valid but not my primary mailbox, aside from its being the unfortunate victim of intensive mail-bombing at the moment. Please keep replies on the 'group where everyone may benefit.
Jan 15 2004
In article <bu5v03$1qkr$1 digitaldaemon.com>, Stewart Gordon says...I had reported it and fixed in DMD 0.78. http://www.digitalmars.com/drn-bin/wwwnews?D/21167 yaneurao.Using DMD 0.77, Windows 98SE.<snip>WINTEST caused an invalid page fault in module KERNEL32.DLL at 0167:bff8ac13.Well if nobody's found the solution, it seems I've found it. Just upgraded to DMD 0.78 and it seems to work now.
Jan 15 2004
"yaneurao" <yaneurao_member pathlink.com> wrote in message news:bu69fq$2b6s$1 digitaldaemon.com...I had reported it and fixed in DMD 0.78. http://www.digitalmars.com/drn-bin/wwwnews?D/21167Yes, thanks to you!
Jan 15 2004