-    if (wxWinHandleList)
-        delete wxWinHandleList;
-
-    // GL: I'm annoyed ... I don't know where to put this and I don't want to
-    // create a module for that as it's part of the core.
-#if wxUSE_THREADS
-    delete wxPendingEvents;
-    delete wxPendingEventsLocker;
-    // If we don't do the following, we get an apparent memory leak.
-    ((wxEvtHandler&) wxDefaultValidator).ClearEventLocker();
-#endif
-
-    wxClassInfo::CleanUpClasses();
-
-    delete wxTheApp;
-    wxTheApp = NULL;
-
-#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
-    // At this point we want to check if there are any memory
-    // blocks that aren't part of the wxDebugContext itself,
-    // as a special case. Then when dumping we need to ignore
-    // wxDebugContext, too.
-    if (wxDebugContext::CountObjectsLeft(TRUE) > 0)
-    {
-        wxLogDebug(wxT("There were memory leaks."));
-        wxDebugContext::Dump();
-        wxDebugContext::PrintStatistics();
-    }
-    //  wxDebugContext::SetStream(NULL, NULL);
-#endif
-
-#if wxUSE_LOG
-    // do it as the very last thing because everything else can log messages
-    delete wxLog::SetActiveTarget(NULL);
-#endif // wxUSE_LOG
-}
-
-#if !defined(_WINDLL) || (defined(_WINDLL) && defined(WXMAKINGDLL))
-
-//// Main wxWindows entry point
-int wxEntry(WXHINSTANCE hInstance,
-            WXHINSTANCE WXUNUSED(hPrevInstance),
-            char *lpCmdLine,
-            int nCmdShow,
-            bool enterLoop)
-{
-    // do check for memory leaks on program exit
-    // (another useful flag is _CRTDBG_DELAY_FREE_MEM_DF which doesn't free
-    //  deallocated memory which may be used to simulate low-memory condition)
-// TODO:    wxCrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);
-
-    // take everything into a try-except block in release build
-    // FIXME other compilers must support Win32 SEH (structured exception
-    //       handling) too, just find the appropriate keyword in their docs!
-    //       Please note that it's _not_ the same as C++ exceptions!
-
-        wxhInstance = (HINSTANCE) hInstance;
-
-        if (!wxApp::Initialize())
-            return 0;
-
-        // create the application object or ensure that one already exists
-        if (!wxTheApp)
-        {
-            // The app may have declared a global application object, but we recommend
-            // the IMPLEMENT_APP macro is used instead, which sets an initializer
-            // function for delayed, dynamic app object construction.
-            wxCHECK_MSG( wxApp::GetInitializerFunction(), 0,
-                         wxT("No initializer - use IMPLEMENT_APP macro.") );
-
-            wxTheApp = (wxApp*)(*wxApp::GetInitializerFunction()) ();
-        }
-
-        wxCHECK_MSG( wxTheApp, 0, wxT("You have to define an instance of wxApp!") );
-
-        // save the WinMain() parameters
-        wxTheApp->ConvertToStandardCommandArgs(lpCmdLine);
-        wxTheApp->m_nCmdShow = nCmdShow;
-
-        // GUI-specific initialisation. In fact on Windows we don't have any,
-        // but this call is provided for compatibility across platforms.
-        wxTheApp->OnInitGui();
-
-        int retValue = 0;
-
-        if ( wxTheApp->OnInit() )
-        {
-            if ( enterLoop )
-            {
-                retValue = wxTheApp->OnRun();
-            }
-            else
-                // We want to initialize, but not run or exit immediately.
-                return 1;
-        }
-        //else: app initialization failed, so we skipped OnRun()
-
-        wxWindow *topWindow = wxTheApp->GetTopWindow();
-        if ( topWindow )
-        {
-            // Forcibly delete the window.
-            if ( topWindow->IsKindOf(CLASSINFO(wxFrame)) ||
-                    topWindow->IsKindOf(CLASSINFO(wxDialog)) )
-            {
-                topWindow->Close(TRUE);
-                wxTheApp->DeletePendingObjects();
-            }
-            else
-            {
-                delete topWindow;
-                wxTheApp->SetTopWindow(NULL);
-            }
-        }
-
-        wxTheApp->OnExit();