From 6d381d6738a51be39fb41628b767e9c4e15bf80f Mon Sep 17 00:00:00 2001 From: Daniel Kamil Kozar Date: Wed, 5 Feb 2020 16:27:23 +0100 Subject: [PATCH] Use "standard" int main in Windows builds Using WinMain is not necessary in order to get access to the "wide" command line, and makes the MSVCRT skip all the initialisation steps needed for "Console API" to work correctly, leading to the program having no output in Windows console programs that use it - most notably, cmd.exe. --- tsMuxer/CMakeLists.txt | 2 +- tsMuxer/main.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tsMuxer/CMakeLists.txt b/tsMuxer/CMakeLists.txt index 9e38fd8c..b410b0c6 100644 --- a/tsMuxer/CMakeLists.txt +++ b/tsMuxer/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required (VERSION 3.1) project (tsmuxer LANGUAGES CXX) -add_executable (tsmuxer WIN32 +add_executable (tsmuxer aac.cpp aacStreamReader.cpp AbstractDemuxer.cpp diff --git a/tsMuxer/main.cpp b/tsMuxer/main.cpp index 7f401f5a..456c873a 100644 --- a/tsMuxer/main.cpp +++ b/tsMuxer/main.cpp @@ -549,9 +549,11 @@ All parameters in this group start with two dashes:\n\ #ifdef _WIN32 #include -int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +#endif + +int main(int argc, char** argv) { - int argc; +#ifdef _WIN32 auto argvWide = CommandLineToArgvW(GetCommandLineW(), &argc); std::vector argv_utf8; argv_utf8.reserve(static_cast(argc)); @@ -560,15 +562,13 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) argv_utf8.emplace_back(toUtf8(argvWide[i])); } LocalFree(argvWide); - std::vector argv; - argv.reserve(argv_utf8.size()); + std::vector argv_vec; + argv_vec.reserve(argv_utf8.size()); for (auto&& s : argv_utf8) { - argv.push_back(&s[0]); + argv_vec.push_back(&s[0]); } -#else -int main(int argc, char** argv) -{ + argv = &argv_vec[0]; #endif LTRACE(LT_INFO, 2, "tsMuxeR version " TSMUXER_VERSION << ". github.com/justdan96/tsMuxer"); int firstMplsOffset = 0;