| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
> What exactly does this mean? What will be the exact limitation put on > the mingw community? This the old "win32 callbacks" problem. "Foreign" means a frame that was compiled without Dwarf-2 unwind tables, as occurs in Windows GUI programming when the window procedure gets invoked as a callback from the operating system. If you try to throw an exception in the window procedure the unwinder can't unwind through the user32/kernel32/whatever frame because it has no unwind information (and those DLLs have FPO enabled.) Below is a simple testcase, run it from a console and it will create a window. Close the window and you should see "done!" printed to stdout. If you build this with any Dwarf-2 enabled compiler however you'll see it abort with an unhandled exception: This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. #include <stdexcept> #include <iostream> #include <windows.h> LRESULT CALLBACK WndProc (HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch (uiMsg) { case WM_CREATE: return TRUE; case WM_DESTROY: throw std::runtime_error ("done!"); break; default: return DefWindowProc (hwnd, uiMsg, wParam, lParam); } } int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nShowCmd) { WNDCLASS c; MSG m; HWND h; memset (&c, 0, sizeof (c)); c.hCursor = LoadCursor(NULL, IDC_ARROW); c.lpfnWndProc = WndProc; c.hInstance = hinst; c.lpszClassName = "foo"; RegisterClass (&c); h = CreateWindow ("foo", "foo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinst, 0); ShowWindow (h, nShowCmd); try { while (GetMessage (&m, NULL, 0, 0)) { TranslateMessage (&m); DispatchMessage (&m); } } catch (std::exception &e) { std::cout << e.what (); } return 0; } ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ MinGW-users mailing list MinGW-users You may change your MinGW Account Options or unsubscribe at: https://lists.sourceforge.net/lists/listinfo/mingw-users
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© 2004-2008 readlist.com