+
+ // app execution
+ int retValue = wxTheApp->OnRun();
+
+ // why should we do this? it doesn't close all window, just one of them and
+ // this shouldn't be necessary anyhow...
+#if 0
+ // close any remaining windows
+ wxWindow *topWindow = wxTheApp->GetTopWindow();
+ if ( topWindow )
+ {
+ // forcibly delete the window.
+ topWindow->Destroy();
+
+ // collect the dead objects
+ wxTheApp->DeletePendingObjects();
+ }
+#endif // 0
+
+ // app clean up
+ wxTheApp->OnExit();
+
+ return retValue;
+}
+
+// wrap real wxEntry in a try-except block to be able to call
+// OnFatalException() if necessary
+#if defined(__WXMSW__) && wxUSE_ON_FATAL_EXCEPTION
+
+extern unsigned long wxGlobalSEHandler();
+
+int wxEntry(int& argc, wxChar **argv)
+{
+ __try
+ {
+ return wxEntryReal(argc, argv);
+ }
+ __except ( wxGlobalSEHandler() )
+ {
+ ::ExitProcess(3); // the same exit code as abort()
+
+ // this code is unreachable but put it here to suppress warnings
+ return -1;
+ }
+}
+
+#endif // __WXMSW__ && wxUSE_ON_FATAL_EXCEPTION
+
+#if wxUSE_UNICODE
+
+// as with wxEntryStart, we provide an ANSI wrapper
+int wxEntry(int& argc, char **argv)
+{
+ ConvertArgsToUnicode(argc, argv);
+
+ return wxEntry(argc, gs_initData.argv);