From b168708bfac71290d0dcaa85e6ffed61c80ba74e Mon Sep 17 00:00:00 2001 From: TogDu Date: Sat, 17 Feb 2018 19:28:48 +0100 Subject: [PATCH] FIX : argv wasn't initialized so QApp cannot return valid argc value --- RpcView/RpcView.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/RpcView/RpcView.cpp b/RpcView/RpcView.cpp index 77ac248..5a39d73 100644 --- a/RpcView/RpcView.cpp +++ b/RpcView/RpcView.cpp @@ -328,21 +328,28 @@ End: HICON hMainIcon; UCHAR CurrentDirectory[MAX_PATH]; UCHAR* pSeparator; - + int ret = 0; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); #else int argc = 0; - //char* pCmdLineA = NULL; - char* argv[100] = { 0 }; - - UNREFERENCED_PARAMETER(pCmdLine); + UNREFERENCED_PARAMETER(hInstance); UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(nCmdShow); pCmdLine = GetCommandLineW(); + LPWSTR* argvw = CommandLineToArgvW(pCmdLine, &argc); + + char** argv = (char**)malloc(argc*sizeof(char*)); + for (int i = 0; i < argc; i++) + { + size_t tmpSize = lstrlenW(argvw[i]) * 2 + 2; + argv[i] = (char*)malloc(tmpSize); + wcstombs_s(&tmpSize, argv[i], tmpSize, argvw[i], tmpSize); + } + #endif QApplication app(argc, argv); QSettings Settings(RPC_VIEW_ORGANIZATION_NAME, RPC_VIEW_APPLICATION_NAME); @@ -373,8 +380,7 @@ End: return 0; } #else - //argc is corrupted ? - //if (argc>1) + if (argc>1) { if (argvw[1] && !wcsncmp(argvw[1], L"/f", 2)) { @@ -395,5 +401,12 @@ End: pMainWindow->setWindowIcon(QtWin::fromHICON(hMainIcon)); DestroyIcon(hMainIcon); } - return app.exec(); + ret = app.exec(); + +#ifndef _DEBUG + for (int i = 0; i < argc; i++) + free(argv[i]); + free(argv); +#endif + return ret; } \ No newline at end of file