From bfa78c63b9045c2a594ca6f04dc26a70c21f5f42 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 30 Aug 2012 20:19:57 +0000 Subject: [PATCH] Use wmain() if supported by the compiler/CRT instead of main(). This avoids a needless conversion from (originally Unicode) command line to ANSI by the CRT and conversion back by wxWidgets and, especially, ensures that there is no data loss if the Unicode command line arguments can't be converted into the current charset. See #14580. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72402 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/app.h | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/include/wx/app.h b/include/wx/app.h index 82b2868578..fbd85a7839 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -766,13 +766,26 @@ public: // your compiler really, really wants main() to be in your main program (e.g. // hello.cpp). Now wxIMPLEMENT_APP should add this code if required. -#define wxIMPLEMENT_WXWIN_MAIN_CONSOLE \ - int main(int argc, char **argv) \ - { \ - wxDISABLE_DEBUG_SUPPORT(); \ +// For compilers that support it, prefer to use wmain() as this ensures any +// Unicode strings can be passed as command line parameters and not just those +// representable in the current locale. +#if wxUSE_UNICODE && defined(__VISUALC__) + #define wxIMPLEMENT_WXWIN_MAIN_CONSOLE \ + int wmain(int argc, wchar_t **argv) \ + { \ + wxDISABLE_DEBUG_SUPPORT(); \ \ - return wxEntry(argc, argv); \ - } + return wxEntry(argc, argv); \ + } +#else // Use standard main() + #define wxIMPLEMENT_WXWIN_MAIN_CONSOLE \ + int main(int argc, char **argv) \ + { \ + wxDISABLE_DEBUG_SUPPORT(); \ + \ + return wxEntry(argc, argv); \ + } +#endif // port-specific header could have defined it already in some special way #ifndef wxIMPLEMENT_WXWIN_MAIN