mainar.cpp

来自「由7-zip提供的压缩、解压缩程序」· C++ 代码 · 共 140 行

CPP
140
字号
// MainAr.cpp#include "StdAfx.h"// #include <locale.h>#include "Windows/Error.h"#include "Common/StdOutStream.h"#include "Common/NewHandler.h"#include "Common/Exception.h"#include "Common/StringConvert.h"#include "../Common/ExitCode.h"#include "ConsoleClose.h"using namespace NWindows;CStdOutStream *g_StdStream = 0;extern int Main2(  #ifndef _WIN32    int numArguments, const char *arguments[]  #endif);static const char *kExceptionErrorMessage = "\n\nError:\n";static const char *kUserBreak  = "\nBreak signaled\n";static const char *kMemoryExceptionMessage = "\n\nERROR: Can't allocate required memory!\n";static const char *kUnknownExceptionMessage = "\n\nUnknown Error\n";static const char *kInternalExceptionMessage = "\n\nInternal Error #";#ifdef UNICODEstatic inline bool IsItWindowsNT(){  OSVERSIONINFO versionInfo;  versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);  if (!::GetVersionEx(&versionInfo))     return false;  return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT);}#endifint #ifdef _MSC_VER__cdecl #endifmain(#ifndef _WIN32  int numArguments, const char *arguments[]#endif){  g_StdStream = &g_StdOut;  #ifdef UNICODE  if (!IsItWindowsNT())  {    (*g_StdStream) << "This program requires Windows NT/2000/XP/2003";    return NExitCode::kFatalError;  }  #endif  // setlocale(LC_COLLATE, ".OCP");  NConsoleClose::CCtrlHandlerSetter ctrlHandlerSetter;  try  {    return Main2(#ifndef _WIN32      numArguments, arguments#endif    );  }  catch(const CNewException &)  {    (*g_StdStream) << kMemoryExceptionMessage;    return (NExitCode::kMemoryError);  }  catch(const NConsoleClose::CCtrlBreakException &)  {    (*g_StdStream) << endl << kUserBreak;    return (NExitCode::kUserBreak);  }  catch(const CSystemException &systemError)  {    if (systemError.ErrorCode == E_OUTOFMEMORY)    {      (*g_StdStream) << kMemoryExceptionMessage;      return (NExitCode::kMemoryError);    }    if (systemError.ErrorCode == E_ABORT)    {      (*g_StdStream) << endl << kUserBreak;      return (NExitCode::kUserBreak);    }    UString message;    NError::MyFormatMessage(systemError.ErrorCode, message);    (*g_StdStream) << endl << endl << "System error:" << endl <<         message << endl;    return (NExitCode::kFatalError);  }  catch(NExitCode::EEnum &exitCode)  {    (*g_StdStream) << kInternalExceptionMessage << exitCode << endl;    return (exitCode);  }  /*  catch(const NExitCode::CMultipleErrors &multipleErrors)  {    (*g_StdStream) << endl << multipleErrors.NumErrors << " errors" << endl;    return (NExitCode::kFatalError);  }  */  catch(const UString &s)  {    (*g_StdStream) << kExceptionErrorMessage << s << endl;    return (NExitCode::kFatalError);  }  catch(const AString &s)  {    (*g_StdStream) << kExceptionErrorMessage << s << endl;    return (NExitCode::kFatalError);  }  catch(const char *s)  {    (*g_StdStream) << kExceptionErrorMessage << s << endl;    return (NExitCode::kFatalError);  }  catch(int t)  {    (*g_StdStream) << kInternalExceptionMessage << t << endl;    return (NExitCode::kFatalError);  }  catch(...)  {    (*g_StdStream) << kUnknownExceptionMessage;    return (NExitCode::kFatalError);  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?