コード例 #1
0
ファイル: Exception.cpp プロジェクト: Dmitriy333/OOP5
// On Windows platform converts exception to external error info. Exception
// object passed as an argument is deleted before return. Returns
// error code, which should be returned by a calling procedure.
// On Unix platform the function simply re-throws exception.
HRESULT ConvertExceptionToComError(Exception* e, const char* source)
{
#ifdef CFG_WIN32
  //int errCode = e->ErrCode();
  int errCode = EXTERNAL_ERROR;
  std::string msg = ExceptionString(e);
#ifdef _DEBUG
  if (!IsEmpty(source))
    msg += FormattedString("\nSource: %s", source);
#endif // DEBUG
  CreateComErrorInfo(msg.c_str(), source, NULL, 0);
  delete e;
  return errCode;
#endif // CFG_WIN32
#ifdef API_POSIX
  throw e;
#endif // API_POSIX
}
コード例 #2
0
ファイル: Commons.cpp プロジェクト: GraffLittle/first
//---------------------------------------------------------------------------
TTreeNode* __fastcall TExceptionMessages::AddFFL( AnsiString Str,
  AnsiString File, AnsiString Func, int Line)
{
  MainForm->StatBar->Panels->Items[2]->Text = "E";

  if (!OutTree) {
    AnsiString Mess = "[" + DateTimeToStr(Now()) + "] : " + Str +
      "\nFile = " + ExtractFileName(File) + " (" + IntToStr(Line) + ")" +
      "\nFunction = " + Func;
    ShowMessage(Mess);
    return NULL;
    }

  TTreeNode *TN = OutTree->Items->Add( NULL,
    "[" + DateTimeToStr(Now()) + "] : " + Str);
  OutTree->Items->AddChild( TN, AnsiString("File = ") + ExtractFileName(File) +
    " (" + IntToStr(Line) + ")");
  OutTree->Items->AddChild( TN, "Function = " + Func);

  if (exxp) {
    OutTree->Items->AddChild( TN, ExceptionString(er.ExceptionCode));
    TTreeNode *tn1 = OutTree->Items->AddChild( TN, "Context");
    OutTree->Items->AddChild( tn1, "Flags = 0x" +
      IntToHex((int)cntxt.ContextFlags,8) + ", " +
      ContextFlagsString(cntxt.ContextFlags));
    if ((cntxt.ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL) {
      TTreeNode *tn2 = OutTree->Items->AddChild( tn1, "Control");
      OutTree->Items->AddChild( tn2, "Ebp = 0x" + IntToHex((int)cntxt.Ebp,8));
      OutTree->Items->AddChild( tn2, "Eip = 0x" + IntToHex((int)cntxt.Eip,8));
      OutTree->Items->AddChild( tn2, "SegCs = 0x" + IntToHex((int)cntxt.SegCs,8));
      OutTree->Items->AddChild( tn2, "EFlags = 0x" + IntToHex((int)cntxt.EFlags,8));
      OutTree->Items->AddChild( tn2, "Esp = 0x" + IntToHex((int)cntxt.Esp,8));
      OutTree->Items->AddChild( tn2, "SegSs = 0x" + IntToHex((int)cntxt.SegSs,8));
      }
    if ((cntxt.ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER) {
      TTreeNode *tn2 = OutTree->Items->AddChild( tn1, "Integer");
      OutTree->Items->AddChild( tn2, "Edi = 0x" + IntToHex((int)cntxt.Edi,8));
      OutTree->Items->AddChild( tn2, "Esi = 0x" + IntToHex((int)cntxt.Esi,8));
      OutTree->Items->AddChild( tn2, "Ebx = 0x" + IntToHex((int)cntxt.Ebx,8));
      OutTree->Items->AddChild( tn2, "Edx = 0x" + IntToHex((int)cntxt.Edx,8));
      OutTree->Items->AddChild( tn2, "Ecx = 0x" + IntToHex((int)cntxt.Ecx,8));
      OutTree->Items->AddChild( tn2, "Eax = 0x" + IntToHex((int)cntxt.Eax,8));
      }
    if ((cntxt.ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS) {
      TTreeNode *tn2 = OutTree->Items->AddChild( tn1, "Segments");
      OutTree->Items->AddChild( tn2, "SegGs = 0x" + IntToHex((int)cntxt.SegGs,8));
      OutTree->Items->AddChild( tn2, "SegFs = 0x" + IntToHex((int)cntxt.SegFs,8));
      OutTree->Items->AddChild( tn2, "SegEs = 0x" + IntToHex((int)cntxt.SegEs,8));
      OutTree->Items->AddChild( tn2, "SegDs = 0x" + IntToHex((int)cntxt.SegDs,8));
      }
    if ((cntxt.ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT) {
      TTreeNode *tn2 = OutTree->Items->AddChild( tn1, "Floating point");
      OutTree->Items->AddChild( tn2, "Control word = 0x" + IntToHex((int)cntxt.FloatSave.ControlWord,8));
      OutTree->Items->AddChild( tn2, "Status word = 0x" + IntToHex((int)cntxt.FloatSave.StatusWord,8));
      OutTree->Items->AddChild( tn2, "Tag word = 0x" + IntToHex((int)cntxt.FloatSave.TagWord,8));
      OutTree->Items->AddChild( tn2, "Error offset = 0x" + IntToHex((int)cntxt.FloatSave.ErrorOffset,8));
      OutTree->Items->AddChild( tn2, "Error selector = 0x" + IntToHex((int)cntxt.FloatSave.ErrorSelector,8));
      OutTree->Items->AddChild( tn2, "Data offset = 0x" + IntToHex((int)cntxt.FloatSave.DataOffset,8));
      OutTree->Items->AddChild( tn2, "Data selector = 0x" + IntToHex((int)cntxt.FloatSave.DataSelector,8));
      OutTree->Items->AddChild( tn2, "Cr0NpxState = 0x" + IntToHex((int)cntxt.FloatSave.Cr0NpxState,8));
      }
    if ((cntxt.ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS) {
      TTreeNode *tn2 = OutTree->Items->AddChild( tn1, "Debug registers");
      OutTree->Items->AddChild( tn2, "Dr0 = 0x" + IntToHex((int)cntxt.Dr0,8));
      OutTree->Items->AddChild( tn2, "Dr1 = 0x" + IntToHex((int)cntxt.Dr1,8));
      OutTree->Items->AddChild( tn2, "Dr2 = 0x" + IntToHex((int)cntxt.Dr2,8));
      OutTree->Items->AddChild( tn2, "Dr3 = 0x" + IntToHex((int)cntxt.Dr3,8));
      OutTree->Items->AddChild( tn2, "Dr6 = 0x" + IntToHex((int)cntxt.Dr6,8));
      OutTree->Items->AddChild( tn2, "Dr7 = 0x" + IntToHex((int)cntxt.Dr7,8));
      }
    if ((cntxt.ContextFlags & CONTEXT_EXTENDED_REGISTERS) == CONTEXT_EXTENDED_REGISTERS) {
      OutTree->Items->AddChild( tn1, "Extended registers");
      }
    exxp = NULL;
    }

  return TN;
}