fix windows build

This commit is contained in:
2024-05-23 19:59:39 +08:00
parent 44f2f632cd
commit a12b152837
2 changed files with 13 additions and 5 deletions

3
.gitignore vendored
View File

@@ -3,6 +3,7 @@
build/ build/
out/
cmake-build-*/ cmake-build-*/
.cmake/ .cmake/
CMakeFiles/ CMakeFiles/
@@ -24,3 +25,5 @@ Makefile
*.dll *.dll
*.exe *.exe
*.out *.out
CMakeSettings.json

View File

@@ -299,13 +299,15 @@ int MainEntry(int argc, char** argv) {
// The real main entry // The real main entry
#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)
extern "C" void __wgetmainargs(int*, wchar_t***, wchar_t***, int, int*); #include <windows.h>
int main(int argc, char** argv) { int main(int argc, char** argv) {
int argcW; int argcW = 0;
wchar_t** argvW; wchar_t** argvW = CommandLineToArgvW(GetCommandLineW(), &argcW);
wchar_t** envW; if (argvW == nullptr) {
__wgetmainargs(&argcW, &argvW, &envW, 0, nullptr); fmt::print("Unable to parse command line\n");
return 1;
}
std::vector<std::string> args; std::vector<std::string> args;
args.reserve(argcW); args.reserve(argcW);
for (int i = 0; i < argcW; i++) { for (int i = 0; i < argcW; i++) {
@@ -316,6 +318,9 @@ int main(int argc, char** argv) {
for (auto& arg: args) { for (auto& arg: args) {
argvC.push_back(arg.data()); argvC.push_back(arg.data());
} }
LocalFree(argvW);
SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);
return MainEntry((int) argvC.size(), argvC.data()); return MainEntry((int) argvC.size(), argvC.data());
} }