Re: [Mingw-users] GCC 4.3.0 20080502 (alpha) Released - Please helpus test it!
- Date: Mon, 05 May 2008 18:58:59 -0700
- From: Brian Dessent <brian@xxxxxxxxxxx>
- Subject: Re: [Mingw-users] GCC 4.3.0 20080502 (alpha) Released - Please helpus test it!
Bob Rossi wrote:
> 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@xxxxxxxxxxxxxxxxxxxxx
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users