http://bugs.winehq.org/show_bug.cgi?id=36078
--- Comment #2 from Piotr Caban piotr.caban@gmail.com --- Following code demonstrates the problem: try { try { RaiseException(0xc0000006, 0, 0, NULL); }catch(...) { printf("got exception\n"); throw; } }catch(...) { printf("got exception2\n"); }
On windows the second catch gets exception with 0xc0000006 code. On wine it treats it as C++ exception, that causes "access violation" and we're catching 0xc0000005.
This code demontrates the problem a little better: void rethrow_seh_exception(void) { try { RaiseException(0xc0000006, 0, 0, NULL); }catch(...) { printf("got exception\n"); throw; } }
void test_seh_exception(void) { __try { rethrow_seh_exception(); }__except(1) { printf("got exception2: %x\n", GetExceptionCode()); } } ... test_seh_exception();
On windows it produces following output: got exception got exception2: c0000006
On wine: got exception got exception2: e06d7363