+ wxFatalExit();
+#endif // not a DLL
+ break;
+
+ case EXCEPTION_CONTINUE_SEARCH:
+ // we're called for each "catch ( ... )" and if we (re)throw from
+ // here, the catch handler body is not executed, so the effect is
+ // as if had inhibited translation of SE to C++ ones because the
+ // handler will never see any structured exceptions
+ throw;
+ }
+}
+
+#endif // __VISUALC__
+
+bool wxHandleFatalExceptions(bool doit)
+{
+ // assume this can only be called from the main thread
+ gs_handleExceptions = doit;
+
+#if wxUSE_CRASHREPORT
+ if ( doit )
+ {
+ // try to find a place where we can put out report file later
+ wxChar fullname[MAX_PATH];
+ if ( !::GetTempPath(WXSIZEOF(fullname), fullname) )
+ {
+ wxLogLastError(_T("GetTempPath"));
+
+ // when all else fails...
+ wxStrcpy(fullname, _T("c:\\"));
+ }
+
+ // use PID and date to make the report file name more unique
+ wxString name = wxString::Format
+ (
+ _T("%s_%s_%lu.dmp"),
+ wxTheApp ? wxTheApp->GetAppName().c_str()
+ : _T("wxwindows"),
+ wxDateTime::Now().Format(_T("%Y%m%dT%H%M%S")).c_str(),
+ ::GetCurrentProcessId()
+ );
+
+ wxStrncat(fullname, name, WXSIZEOF(fullname) - wxStrlen(fullname) - 1);
+
+ wxCrashReport::SetFileName(fullname);
+ }
+#endif // wxUSE_CRASHREPORT
+
+ return true;
+}
+
+int wxEntry(int& argc, wxChar **argv)
+{
+ DisableAutomaticSETranslator();
+
+ wxSEH_TRY
+ {
+ return wxEntryReal(argc, argv);
+ }
+ wxSEH_HANDLE(-1)
+}
+
+#else // !wxUSE_ON_FATAL_EXCEPTION
+
+#if defined(__VISUALC__) && !defined(__WXWINCE__)
+
+static void
+wxSETranslator(unsigned int WXUNUSED(code), EXCEPTION_POINTERS * WXUNUSED(ep))
+{
+ // see wxSETranslator() version for wxUSE_ON_FATAL_EXCEPTION above
+ throw;
+}
+
+#endif // __VISUALC__
+
+int wxEntry(int& argc, wxChar **argv)
+{
+ DisableAutomaticSETranslator();
+
+ return wxEntryReal(argc, argv);
+}
+
+#endif // wxUSE_ON_FATAL_EXCEPTION/!wxUSE_ON_FATAL_EXCEPTION
+
+#endif // wxUSE_BASE
+
+#if wxUSE_GUI && defined(__WXMSW__)
+
+#if wxUSE_UNICODE && !defined(__WXWINCE__)
+ #define NEED_UNICODE_CHECK
+#endif
+
+#ifdef NEED_UNICODE_CHECK
+
+// check whether Unicode is available
+static bool wxIsUnicodeAvailable()
+{
+ static const wchar_t *ERROR_STRING = L"wxWidgets Fatal Error";
+
+ if ( wxGetOsVersion() != wxOS_WINDOWS_NT )