diff --git a/wchar_util.cpp b/wchar_util.cpp index 35ee8c7..f954d2a 100644 --- a/wchar_util.cpp +++ b/wchar_util.cpp @@ -158,4 +158,23 @@ bool wchar_util::getArgv(char**& argv, int& argc) { void wchar_util::freeArgv(char** argv, int argc) { freePointerList(argv, argc, nullptr); } + +bool wchar_util::getArgv(std::vector& argv) { + auto cmd = GetCommandLineW(); + int argcw = 0; + auto argvw = CommandLineToArgvW(cmd, &argcw); + if (!argvw) return false; + bool ret = true; + for (int i = 0; i < argcw; i++) { + std::wstring s = argvw[i]; + std::string r; + if (!wchar_util::wstr_to_str(r, s, CP_UTF8)) { + ret = false; + break; + } + argv.push_back(r); + } + LocalFree(argvw); + return ret; +} #endif diff --git a/wchar_util.h b/wchar_util.h index 4a68ece..99de1d9 100644 --- a/wchar_util.h +++ b/wchar_util.h @@ -1,6 +1,7 @@ #ifndef _UTIL_WCHAR_UTIL_H #define _UTIL_WCHAR_UTIL_H -#include +#include +#include #if _WIN32 #include #endif @@ -45,6 +46,7 @@ namespace wchar_util { */ bool getArgv(char**& argv, int& argc); void freeArgv(char** argv, int argc); + bool getArgv(std::vector& argv); #endif } #endif