INT32_MAIN_INT32_ARGC_TCHAR_ARGV() { // FPlatformProcess::OpenProcess only implemented for windows atm #if PLATFORM_WINDOWS if (ArgC == 4 && FCString::Strcmp(ArgV[1], TEXT("-xgemonitor")) == 0) { // Open handles to the two processes FProcHandle EngineProc = FPlatformProcess::OpenProcess(FCString::Atoi(ArgV[2])); FProcHandle BuildProc = FPlatformProcess::OpenProcess(FCString::Atoi(ArgV[3])); if (EngineProc.IsValid() && BuildProc.IsValid()) { // Whilst the build is still in progress while (FPlatformProcess::IsProcRunning(BuildProc)) { // Check that the engine is still alive. if (!FPlatformProcess::IsProcRunning(EngineProc)) { // The engine has shutdown before the build was stopped. // Kill off the build process FPlatformProcess::TerminateProc(BuildProc); break; } FPlatformProcess::Sleep(0.01f); } } return 0; } #endif if(ArgC < 6) { printf("ShaderCompileWorker is called by UE4, it requires specific command like arguments.\n"); return -1; } // Game exe can pass any number of parameters through with appGetSubprocessCommandline // so just make sure we have at least the minimum number of parameters. check(ArgC >= 6); TCHAR OutputFilePath[PLATFORM_MAX_FILEPATH_LENGTH]; FCString::Strncpy(OutputFilePath, ArgV[1], PLATFORM_MAX_FILEPATH_LENGTH); FCString::Strncat(OutputFilePath, ArgV[5], PLATFORM_MAX_FILEPATH_LENGTH); const int32 ReturnCode = GuardedMainWrapper(ArgC,ArgV,OutputFilePath); return ReturnCode; }
// Main entry point to the application int32 main( int32 ArgC, ANSICHAR* ArgV[] ) { const int32 Result = GuardedMainWrapper( ArgC, ArgV ); return Result; }
// Main entry point to the application INT32_MAIN_INT32_ARGC_TCHAR_ARGV() { const int32 Result = GuardedMainWrapper( ArgC, ArgV ); return Result; }