]> git.saurik.com Git - wxWidgets.git/commitdiff
Define wxEntry() with WinMain-compatible signature for all Windows ports.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 30 Jun 2012 16:33:28 +0000 (16:33 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 30 Jun 2012 16:33:28 +0000 (16:33 +0000)
Make wxEntry(HINSTANCE, ...) available in wxGTK under Windows too.

Refactor the headers to allow this and extract Windows-specific wxEntry()
declarations in wx/msw/init.h from wx/msw/app.h for consistency with the
normal wxEntry(int, char**) declared in wx/init.h.

Closes #14423.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71890 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

Makefile.in
build/bakefiles/files.bkl
build/msw/wx_core.dsp
build/msw/wx_vc7_core.vcproj
build/msw/wx_vc8_core.vcproj
build/msw/wx_vc9_core.vcproj
include/wx/init.h
include/wx/msw/app.h
include/wx/msw/init.h [new file with mode: 0644]
src/msw/main.cpp

index ee7c24d09dd35b24012b6c54fa9afed85ffad9c9..9b511cb50e2c3a06ec9c69a3748f1f5b6e01077b 100644 (file)
@@ -3001,6 +3001,7 @@ COND_TOOLKIT_MSW_GUI_HDR =  \
        wx/msw/icon.h \
        wx/msw/imaglist.h \
        wx/msw/iniconf.h \
+       wx/msw/init.h \
        wx/msw/listbox.h \
        wx/msw/listctrl.h \
        wx/msw/mdi.h \
@@ -3520,6 +3521,7 @@ COND_TOOLKIT_WINCE_GUI_HDR =  \
        wx/msw/icon.h \
        wx/msw/imaglist.h \
        wx/msw/iniconf.h \
+       wx/msw/init.h \
        wx/msw/listbox.h \
        wx/msw/listctrl.h \
        wx/msw/mdi.h \
index bc29c0b76fef49c40a11052fb86349fff9799e77..f0221ab6a9764047929a4b9203e23e5aab0748dc 100644 (file)
@@ -1810,6 +1810,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     wx/msw/icon.h
     wx/msw/imaglist.h
     wx/msw/iniconf.h
+    wx/msw/init.h
     wx/msw/listbox.h
     wx/msw/listctrl.h
     wx/msw/mdi.h
index b56839c4f961cddee62feebef42ab109ac433141..ea371852c7f7e9d9210a4745565c4cb764d9437b 100644 (file)
@@ -5240,6 +5240,10 @@ SOURCE=..\..\include\wx\msw\iniconf.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\msw\init.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\wx\msw\joystick.h\r
 # End Source File\r
 # Begin Source File\r
index 3eddaa9b423ff71b8824b067cb3161ac97368aa4..f77793111e6ab8da2267ef417e669fddd36dc609 100644 (file)
                                RelativePath="..\..\include\wx\msw\iniconf.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\include\wx\msw\init.h">
+                       </File>
+                       <File
                                RelativePath="..\..\include\wx\msw\joystick.h">\r
                        </File>\r
                        <File\r
index 4360a90e45ff0751f9b2e16e4bf805cf278c2887..3ff06c8b01814e7237c89cef0f2b4d84f813c96c 100644 (file)
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\include\wx\msw\init.h"
+                               >
+                       </File>
+                       <File
                                RelativePath="..\..\include\wx\msw\joystick.h"\r
                                >\r
                        </File>\r
index 969b9ef7a665d7361eea0ac7c89ac11761a4d598..eae3a09ac44f105bdf5b722a95589ae078ad474d 100644 (file)
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\include\wx\msw\init.h"
+                               >
+                       </File>
+                       <File
                                RelativePath="..\..\include\wx\msw\joystick.h"\r
                                >\r
                        </File>\r
index 90304ef91839ad2c1553c853c8166d39ca0a002e..974a5a7266d97b97ec24fb67e36db9dac5916b72 100644 (file)
@@ -53,6 +53,12 @@ extern int WXDLLIMPEXP_BASE wxEntry(int& argc, char **argv);
 
 #endif// wxUSE_UNICODE
 
+// Under Windows we define additional wxEntry() overloads with signature
+// compatible with WinMain() and not the traditional main().
+#if wxUSE_GUI && defined(__WINDOWS__)
+    #include "wx/msw/init.h"
+#endif
+
 // ----------------------------------------------------------------------------
 // Using the library without (explicit) application object: you may avoid using
 // wxDECLARE_APP and wxIMPLEMENT_APP macros and call the functions below instead at
index 5c54441e85f39f5d73e00e46c98b5ed0c0d5144e..70df2ce481a18a0f31338635e4931cee103aded3 100644 (file)
@@ -126,81 +126,5 @@ inline int wxApp::GetShell32Version()
 
 #endif // __WXWINCE__
 
-// ----------------------------------------------------------------------------
-// MSW-specific wxEntry() overload and wxIMPLEMENT_WXWIN_MAIN definition
-// ----------------------------------------------------------------------------
-
-// we need HINSTANCE declaration to define WinMain()
-#include "wx/msw/wrapwin.h"
-
-#ifndef SW_SHOWNORMAL
-    #define SW_SHOWNORMAL 1
-#endif
-
-// WinMain() is always ANSI, even in Unicode build, under normal Windows
-// but is always Unicode under CE
-#ifdef __WXWINCE__
-    typedef wchar_t *wxCmdLineArgType;
-#else
-    typedef char *wxCmdLineArgType;
-#endif
-
-// wxMSW-only overloads of wxEntry() and wxEntryStart() which take the
-// parameters passed to WinMain() instead of those passed to main()
-extern WXDLLIMPEXP_CORE bool
-    wxEntryStart(HINSTANCE hInstance,
-                HINSTANCE hPrevInstance = NULL,
-                wxCmdLineArgType pCmdLine = NULL,
-                int nCmdShow = SW_SHOWNORMAL);
-
-extern WXDLLIMPEXP_CORE int
-    wxEntry(HINSTANCE hInstance,
-            HINSTANCE hPrevInstance = NULL,
-            wxCmdLineArgType pCmdLine = NULL,
-            int nCmdShow = SW_SHOWNORMAL);
-
-#if defined(__BORLANDC__) && wxUSE_UNICODE
-    // Borland C++ has the following nonstandard behaviour: when the -WU
-    // command line flag is used, the linker expects to find wWinMain instead
-    // of WinMain. This flag causes the compiler to define _UNICODE and
-    // UNICODE symbols and there's no way to detect its use, so we have to
-    // define both WinMain and wWinMain so that wxIMPLEMENT_WXWIN_MAIN works
-    // for both code compiled with and without -WU.
-    // See http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1935997&group_id=9863
-    // for more details.
-    #define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD                      \
-        extern "C" int WINAPI wWinMain(HINSTANCE hInstance,                 \
-                                      HINSTANCE hPrevInstance,              \
-                                      wchar_t * WXUNUSED(lpCmdLine),        \
-                                      int nCmdShow)                         \
-        {                                                                   \
-            wxDISABLE_DEBUG_SUPPORT();                                      \
-                                                                            \
-            /* NB: wxEntry expects lpCmdLine argument to be char*, not */   \
-            /*     wchar_t*, but fortunately it's not used anywhere    */   \
-            /*     and we can simply pass NULL in:                     */   \
-            return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow);       \
-        }
-#else
-    #define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
-#endif // defined(__BORLANDC__) && wxUSE_UNICODE
-
-#define wxIMPLEMENT_WXWIN_MAIN                                              \
-    extern "C" int WINAPI WinMain(HINSTANCE hInstance,                      \
-                                  HINSTANCE hPrevInstance,                  \
-                                  wxCmdLineArgType WXUNUSED(lpCmdLine),     \
-                                  int nCmdShow)                             \
-    {                                                                       \
-        wxDISABLE_DEBUG_SUPPORT();                                          \
-                                                                            \
-        /* NB: We pass NULL in place of lpCmdLine to behave the same as  */ \
-        /*     Borland-specific wWinMain() above. If it becomes needed   */ \
-        /*     to pass lpCmdLine to wxEntry() here, you'll have to fix   */ \
-        /*     wWinMain() above too.                                     */ \
-        return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow);           \
-    }                                                                       \
-    wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
-
-
 #endif // _WX_APP_H_
 
diff --git a/include/wx/msw/init.h b/include/wx/msw/init.h
new file mode 100644 (file)
index 0000000..986d493
--- /dev/null
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/msw/init.h
+// Purpose:     Windows-specific wxEntry() overload
+// Author:      Julian Smart
+// Modified by:
+// Created:     01/02/97
+// RCS-ID:      $Id$
+// Copyright:   (c) Julian Smart
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_MSW_INIT_H_
+#define _WX_MSW_INIT_H_
+
+// ----------------------------------------------------------------------------
+// Windows-specific wxEntry() overload and wxIMPLEMENT_WXWIN_MAIN definition
+// ----------------------------------------------------------------------------
+
+// we need HINSTANCE declaration to define WinMain()
+#include "wx/msw/wrapwin.h"
+
+#ifndef SW_SHOWNORMAL
+    #define SW_SHOWNORMAL 1
+#endif
+
+// WinMain() is always ANSI, even in Unicode build, under normal Windows
+// but is always Unicode under CE
+#ifdef __WXWINCE__
+    typedef wchar_t *wxCmdLineArgType;
+#else
+    typedef char *wxCmdLineArgType;
+#endif
+
+// Windows-only overloads of wxEntry() and wxEntryStart() which take the
+// parameters passed to WinMain() instead of those passed to main()
+extern WXDLLIMPEXP_CORE bool
+    wxEntryStart(HINSTANCE hInstance,
+                HINSTANCE hPrevInstance = NULL,
+                wxCmdLineArgType pCmdLine = NULL,
+                int nCmdShow = SW_SHOWNORMAL);
+
+extern WXDLLIMPEXP_CORE int
+    wxEntry(HINSTANCE hInstance,
+            HINSTANCE hPrevInstance = NULL,
+            wxCmdLineArgType pCmdLine = NULL,
+            int nCmdShow = SW_SHOWNORMAL);
+
+#if defined(__BORLANDC__) && wxUSE_UNICODE
+    // Borland C++ has the following nonstandard behaviour: when the -WU
+    // command line flag is used, the linker expects to find wWinMain instead
+    // of WinMain. This flag causes the compiler to define _UNICODE and
+    // UNICODE symbols and there's no way to detect its use, so we have to
+    // define both WinMain and wWinMain so that wxIMPLEMENT_WXWIN_MAIN works
+    // for both code compiled with and without -WU.
+    // See http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1935997&group_id=9863
+    // for more details.
+    #define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD                      \
+        extern "C" int WINAPI wWinMain(HINSTANCE hInstance,                 \
+                                      HINSTANCE hPrevInstance,              \
+                                      wchar_t * WXUNUSED(lpCmdLine),        \
+                                      int nCmdShow)                         \
+        {                                                                   \
+            wxDISABLE_DEBUG_SUPPORT();                                      \
+                                                                            \
+            /* NB: wxEntry expects lpCmdLine argument to be char*, not */   \
+            /*     wchar_t*, but fortunately it's not used anywhere    */   \
+            /*     and we can simply pass NULL in:                     */   \
+            return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow);       \
+        }
+#else
+    #define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
+#endif // defined(__BORLANDC__) && wxUSE_UNICODE
+
+#define wxIMPLEMENT_WXWIN_MAIN                                              \
+    extern "C" int WINAPI WinMain(HINSTANCE hInstance,                      \
+                                  HINSTANCE hPrevInstance,                  \
+                                  wxCmdLineArgType WXUNUSED(lpCmdLine),     \
+                                  int nCmdShow)                             \
+    {                                                                       \
+        wxDISABLE_DEBUG_SUPPORT();                                          \
+                                                                            \
+        /* NB: We pass NULL in place of lpCmdLine to behave the same as  */ \
+        /*     Borland-specific wWinMain() above. If it becomes needed   */ \
+        /*     to pass lpCmdLine to wxEntry() here, you'll have to fix   */ \
+        /*     wWinMain() above too.                                     */ \
+        return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow);           \
+    }                                                                       \
+    wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
+
+
+#endif // _WX_MSW_INIT_H_
index d55fef241aa09649f7d4a66e96338e4d45935ece..06cc6a47712ec8274de62550eb5d0e55f7b9c722 100644 (file)
@@ -202,7 +202,7 @@ int wxEntry(int& argc, wxChar **argv)
 
 #endif // wxUSE_BASE
 
-#if wxUSE_GUI && defined(__WXMSW__)
+#if wxUSE_GUI
 
 namespace
 {
@@ -358,7 +358,9 @@ wxMSWEntryCommon(HINSTANCE hInstance, int nCmdShow)
 
     // remember the parameters Windows gave us
     wxSetInstance(hInstance);
+#ifdef __WXMSW__
     wxApp::m_nCmdShow = nCmdShow;
+#endif
 
     // parse the command line: we can't use pCmdLine in Unicode build so it is
     // simpler to never use it at all (this also results in a more correct
@@ -414,7 +416,7 @@ WXDLLEXPORT int wxEntry(HINSTANCE hInstance,
     return wxEntry(wxArgs.argc, wxArgs.argv);
 }
 
-#endif // wxUSE_GUI && __WXMSW__
+#endif // wxUSE_GUI
 
 // ----------------------------------------------------------------------------
 // global HINSTANCE