X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..27b436242eb0257ef471839961250bb3f184fafc:/src/msw/main.cpp diff --git a/src/msw/main.cpp b/src/msw/main.cpp index 1967e0cff2..712dc72347 100644 --- a/src/msw/main.cpp +++ b/src/msw/main.cpp @@ -27,6 +27,7 @@ #include "wx/event.h" #include "wx/app.h" #include "wx/cmdline.h" +#include "wx/scopeguard.h" #include "wx/msw/private.h" @@ -331,6 +332,20 @@ static bool wxIsUnicodeAvailable() // Windows-specific wxEntry // ---------------------------------------------------------------------------- +// helper function used to clean up in wxEntry() just below +// +// notice that argv elements are supposed to be allocated using malloc() while +// argv array itself is allocated with new +static void wxFreeArgs(int argc, wxChar **argv) +{ + for ( int i = 0; i < argc; i++ ) + { + free(argv[i]); + } + + delete [] argv; +} + WXDLLEXPORT int wxEntry(HINSTANCE hInstance, HINSTANCE WXUNUSED(hPrevInstance), wxCmdLineArgType WXUNUSED(pCmdLine), @@ -379,58 +394,11 @@ WXDLLEXPORT int wxEntry(HINSTANCE hInstance, // argv[] must be NULL-terminated argv[argc] = NULL; - return wxEntry(argc, argv); -} - -// May wish not to have a DllMain or WinMain, e.g. if we're programming -// a Netscape plugin or if we're writing a console application -#if !defined(NOMAIN) - -extern "C" -{ - -// ---------------------------------------------------------------------------- -// WinMain -// ---------------------------------------------------------------------------- + wxON_BLOCK_EXIT2(wxFreeArgs, argc, argv); -// Note that WinMain is also defined in dummy.obj, which is linked to -// an application that is using the DLL version of wxWidgets. - -#if defined(_WINDLL) - -// DLL entry point - -BOOL WINAPI -DllMain(HINSTANCE hModule, DWORD fdwReason, LPVOID WXUNUSED(lpReserved)) -{ - // Only call wxEntry if the application itself is part of the DLL. - // If only the wxWidgets library is in the DLL, then the - // initialisation will be called when the application implicitly - // calls WinMain. -#ifndef WXMAKINGDLL - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - return wxEntry(hModule); - - case DLL_PROCESS_DETACH: - wxEntryCleanup(); - break; - } -#else - (void)hModule; - (void)fdwReason; -#endif // !WXMAKINGDLL - - return TRUE; + return wxEntry(argc, argv); } -#endif // _WINDLL - -} // extern "C" - -#endif // !NOMAIN - #endif // wxUSE_GUI && __WXMSW__ // ----------------------------------------------------------------------------