X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c10eaf7d6998c752e9a98dd8721d2f87e3c03f5..818e52c20151ce0c22aa752ccbab94f1ae7afc99:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 591578c2b8..cbf871abde 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -61,11 +61,9 @@ // Also, OLE is used not just for drag and drop (it's used by automatn.cpp). // #if wxUSE_DRAG_AND_DROP #if !defined(__GNUWIN32__) && !defined(__SC__) && !defined(__SALFORDC__) -#include + #include #endif -// #endif - #include #include @@ -73,31 +71,7 @@ #include #endif -// use debug CRT functions for memory leak detections in VC++ if we're not -// using wxWindows own methods -#if defined(__WXDEBUG__) && defined(_MSC_VER) && !wxUSE_GLOBAL_MEMORY_OPERATORS && !defined(__NO_VC_CRTDBG__) - #define wxUSE_VC_CRTDBG -#else - #undef wxUSE_VC_CRTDBG -#endif - -#ifdef wxUSE_VC_CRTDBG - // VC++ uses this macro as debug/release mode indicator - #ifndef _DEBUG - #define _DEBUG - #endif - - /* Need to undef new if including crtdbg.h */ - #ifdef new - #undef new - #endif - - #include - - #if defined(__WXDEBUG__) && wxUSE_GLOBAL_MEMORY_OPERATORS && wxUSE_DEBUG_NEW_ALWAYS - #define new new(__FILE__,__LINE__) - #endif -#endif // wxUSE_VC_CRTDBG +#include "wx/msw/msvcrt.h" extern char *wxBuffer; extern char *wxOsVersion; @@ -163,13 +137,6 @@ bool wxApp::Initialize() wxBuffer = new char[1500]; -#ifdef wxUSE_VC_CRTDBG - // 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) - _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); -#endif // debug build under MS VC++ - wxClassInfo::InitializeClasses(); #if wxUSE_RESOURCES @@ -225,7 +192,7 @@ bool wxApp::Initialize() wxFatalError(_("Cannot initialize OLE")); #endif -#if CTL3D +#if wxUSE_CTL3D if (!Ctl3dRegister(wxhInstance)) wxFatalError("Cannot register CTL3D"); @@ -258,9 +225,9 @@ bool wxApp::Initialize() wxWinHandleList = new wxList(wxKEY_INTEGER); - // This is to foil optimizations in Visual C++ that - // throw out dummy.obj. -#if defined(_MSC_VER) && !defined(WXMAKINGDLL) + // This is to foil optimizations in Visual C++ that throw out dummy.obj. + // PLEASE DO NOT ALTER THIS. +#if defined(__VISUALC__) && !defined(WXMAKINGDLL) extern char wxDummyChar; if (wxDummyChar) wxDummyChar++; #endif @@ -478,6 +445,15 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine) void wxApp::CleanUp() { //// COMMON CLEANUP + + // flush the logged messages if any + wxLog *pLog = wxLog::GetActiveTarget(); + if ( pLog != NULL && pLog->HasPendingMessages() ) + pLog->Flush(); + + // One last chance for pending objects to be cleaned up + wxTheApp->DeletePendingObjects(); + wxModule::CleanUpModules(); #if wxUSE_WX_RESOURCES @@ -544,7 +520,7 @@ void wxApp::CleanUp() ::OleUninitialize(); #endif -#if CTL3D +#if wxUSE_CTL3D Ctl3dUnregister(wxhInstance); #endif @@ -578,7 +554,7 @@ void wxApp::CleanUp() #if !defined(_WINDLL) || (defined(_WINDLL) && defined(WXMAKINGDLL)) // temporarily disable this warning -#ifdef _MSC_VER +#ifdef __VISUALC__ #pragma warning(disable: 4715) // not all control paths return a value #endif // Visual C++ @@ -589,14 +565,19 @@ int wxEntry(WXHINSTANCE hInstance, 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) + 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! -#if !defined(__WXDEBUG__) && defined(_MSC_VER) +#if !defined(__WXDEBUG__) && defined(__VISUALC__) #define CATCH_PROGRAM_EXCEPTIONS - __try { + __try { #else #undef CATCH_PROGRAM_EXCEPTIONS #endif @@ -636,6 +617,9 @@ int wxEntry(WXHINSTANCE hInstance, { retValue = wxTheApp->OnRun(); } + else + // We want to initialize, but not run or exit immediately. + return 1; } //else: app initialization failed, so we skipped OnRun() @@ -658,12 +642,6 @@ int wxEntry(WXHINSTANCE hInstance, wxTheApp->OnExit(); - // flush the logged messages if any - wxLog *pLog = wxLog::GetActiveTarget(); - if ( pLog != NULL && pLog->HasPendingMessages() ) - pLog->Flush(); - - wxApp::CleanUp(); return retValue; @@ -684,7 +662,7 @@ int wxEntry(WXHINSTANCE hInstance, } // restore warning state -#ifdef _MSC_VER +#ifdef __VISUALC__ #pragma warning(default: 4715) // not all control paths return a value #endif // Visual C++ @@ -1151,6 +1129,6 @@ HINSTANCE wxGetInstance() // For some reason, with MSVC++ 1.5, WinMain isn't linked in properly // if in a separate file. So include it here to ensure it's linked. -#if (defined(_MSC_VER) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__TWIN32__)) +#if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__TWIN32__)) #include "main.cpp" #endif