]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/main.cpp
implementation streamlined
[wxWidgets.git] / src / msw / main.cpp
index 8fb3fa3b23e851004526b448cf422de3f6d5aa36..712dc7234796d6488af22fc6b0f4f55f971ec508 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -31,6 +27,7 @@
 #include "wx/event.h"
 #include "wx/app.h"
 #include "wx/cmdline.h"
+#include "wx/scopeguard.h"
 
 #include "wx/msw/private.h"
 
@@ -335,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),
@@ -383,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)
+    wxON_BLOCK_EXIT2(wxFreeArgs, argc, argv);
 
-extern "C"
-{
-
-// ----------------------------------------------------------------------------
-// WinMain
-// ----------------------------------------------------------------------------
-
-// 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__
 
 // ----------------------------------------------------------------------------