Define wxEntry() with WinMain-compatible signature for all Windows ports.
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
This commit is contained in:
@@ -3001,6 +3001,7 @@ COND_TOOLKIT_MSW_GUI_HDR = \
|
|||||||
wx/msw/icon.h \
|
wx/msw/icon.h \
|
||||||
wx/msw/imaglist.h \
|
wx/msw/imaglist.h \
|
||||||
wx/msw/iniconf.h \
|
wx/msw/iniconf.h \
|
||||||
|
wx/msw/init.h \
|
||||||
wx/msw/listbox.h \
|
wx/msw/listbox.h \
|
||||||
wx/msw/listctrl.h \
|
wx/msw/listctrl.h \
|
||||||
wx/msw/mdi.h \
|
wx/msw/mdi.h \
|
||||||
@@ -3520,6 +3521,7 @@ COND_TOOLKIT_WINCE_GUI_HDR = \
|
|||||||
wx/msw/icon.h \
|
wx/msw/icon.h \
|
||||||
wx/msw/imaglist.h \
|
wx/msw/imaglist.h \
|
||||||
wx/msw/iniconf.h \
|
wx/msw/iniconf.h \
|
||||||
|
wx/msw/init.h \
|
||||||
wx/msw/listbox.h \
|
wx/msw/listbox.h \
|
||||||
wx/msw/listctrl.h \
|
wx/msw/listctrl.h \
|
||||||
wx/msw/mdi.h \
|
wx/msw/mdi.h \
|
||||||
|
@@ -1810,6 +1810,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
|||||||
wx/msw/icon.h
|
wx/msw/icon.h
|
||||||
wx/msw/imaglist.h
|
wx/msw/imaglist.h
|
||||||
wx/msw/iniconf.h
|
wx/msw/iniconf.h
|
||||||
|
wx/msw/init.h
|
||||||
wx/msw/listbox.h
|
wx/msw/listbox.h
|
||||||
wx/msw/listctrl.h
|
wx/msw/listctrl.h
|
||||||
wx/msw/mdi.h
|
wx/msw/mdi.h
|
||||||
|
@@ -5240,6 +5240,10 @@ SOURCE=..\..\include\wx\msw\iniconf.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\include\wx\msw\init.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\include\wx\msw\joystick.h
|
SOURCE=..\..\include\wx\msw\joystick.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@@ -4502,6 +4502,9 @@
|
|||||||
RelativePath="..\..\include\wx\msw\iniconf.h">
|
RelativePath="..\..\include\wx\msw\iniconf.h">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath="..\..\include\wx\msw\init.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath="..\..\include\wx\msw\joystick.h">
|
RelativePath="..\..\include\wx\msw\joystick.h">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
@@ -6024,6 +6024,10 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath="..\..\include\wx\msw\init.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath="..\..\include\wx\msw\joystick.h"
|
RelativePath="..\..\include\wx\msw\joystick.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
@@ -6020,6 +6020,10 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath="..\..\include\wx\msw\init.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath="..\..\include\wx\msw\joystick.h"
|
RelativePath="..\..\include\wx\msw\joystick.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
@@ -53,6 +53,12 @@ extern int WXDLLIMPEXP_BASE wxEntry(int& argc, char **argv);
|
|||||||
|
|
||||||
#endif// wxUSE_UNICODE
|
#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
|
// Using the library without (explicit) application object: you may avoid using
|
||||||
// wxDECLARE_APP and wxIMPLEMENT_APP macros and call the functions below instead at
|
// wxDECLARE_APP and wxIMPLEMENT_APP macros and call the functions below instead at
|
||||||
|
@@ -126,81 +126,5 @@ inline int wxApp::GetShell32Version()
|
|||||||
|
|
||||||
#endif // __WXWINCE__
|
#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_
|
#endif // _WX_APP_H_
|
||||||
|
|
||||||
|
91
include/wx/msw/init.h
Normal file
91
include/wx/msw/init.h
Normal file
@@ -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_
|
@@ -202,7 +202,7 @@ int wxEntry(int& argc, wxChar **argv)
|
|||||||
|
|
||||||
#endif // wxUSE_BASE
|
#endif // wxUSE_BASE
|
||||||
|
|
||||||
#if wxUSE_GUI && defined(__WXMSW__)
|
#if wxUSE_GUI
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -358,7 +358,9 @@ wxMSWEntryCommon(HINSTANCE hInstance, int nCmdShow)
|
|||||||
|
|
||||||
// remember the parameters Windows gave us
|
// remember the parameters Windows gave us
|
||||||
wxSetInstance(hInstance);
|
wxSetInstance(hInstance);
|
||||||
|
#ifdef __WXMSW__
|
||||||
wxApp::m_nCmdShow = nCmdShow;
|
wxApp::m_nCmdShow = nCmdShow;
|
||||||
|
#endif
|
||||||
|
|
||||||
// parse the command line: we can't use pCmdLine in Unicode build so it is
|
// 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
|
// 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);
|
return wxEntry(wxArgs.argc, wxArgs.argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_GUI && __WXMSW__
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// global HINSTANCE
|
// global HINSTANCE
|
||||||
|
Reference in New Issue
Block a user