Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Normale Exceptions nicht anzueigen

  Alt 6. Sep 2007, 19:51
Hi,

hab mal bei meinem TurboDelphi nachgesehen.

Delphi-Quellcode:
{$IFDEF PC_MAPPED_EXCEPTIONS}
const
  UW_EXC_CLASS_BORLANDCPP = $FBEE0001;
  UW_EXC_CLASS_BORLANDDELPHI = $FBEE0101;

type
  // The following _Unwind_* types represent unwind.h
  _Unwind_Word = LongWord;
  _Unwind_Exception_Cleanup_Fn = Pointer;
  _Unwind_Exception = packed record
    exception_class: _Unwind_Word;
    exception_cleanup: _Unwind_Exception_Cleanup_Fn;
    private_1: _Unwind_Word;
    private_2: _Unwind_Word;
  end;

  PRaisedException = ^TRaisedException;
  TRaisedException = packed record
    RefCount: Integer;
    ExceptObject: TObject;
    ExceptionAddr: Pointer;
    HandlerEBP: LongWord;
    Flags: LongWord;
    Cleanup: Pointer;
    Prev: PRaisedException;
    ReleaseProc: Pointer;
  end;
{$ELSE}
  PRaiseFrame = ^TRaiseFrame;
  TRaiseFrame = packed record
    NextRaise: PRaiseFrame;
    ExceptAddr: Pointer;
    ExceptObject: TObject;
    ExceptionRecord: PExceptionRecord;
  end;
{$ENDIF}
Jedenfalls scheint es standarsmäßig wie bei Delphi 5 zu sein (also beim Compilieren von System.pas war PC_MAPPED_EXCEPTIONS undefiniert). Denn folgendes zeigt einen fröhlichen Smiley:

Delphi-Quellcode:
type
  PRaiseFrame = ^TRaiseFrame;
  TRaiseFrame = packed record
    NextRaise: PRaiseFrame;
    ExceptAddr: Pointer;
    ExceptObject: TObject;
    ExceptionRecord: PExceptionRecord;
  end;
begin
  try
    raise Exception.Create('');
  except
    on E: Exception do
    begin
      if PRaiseFrame(System.RaiseList).ExceptObject = E then
        ShowMessage(':-)')
      else
        ShowMessage(':-(');
    end;
  end;
end;
Und nun?

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat