Тема: C++Builder bug?
Показать сообщение отдельно
Старый 11.12.2004, 00:23     # 1
blacklist
Newbie
 
Регистрация: 25.08.2004
Сообщения: 11

blacklist Путь к славе только начался
Question C++Builder bug

Имеется следующий, довольно таки незамысловатый, код:
Код:
  __try
  {
     int b = 0;
     int a = 10;
     ShowMessage(IntToStr(a/b));
  }
  catch(const EDivByZero &E)
  {
    ShowMessage(E.Message);
    if (E.ExceptionRecord) 
      ShowMessage(IntToHex((int)E.ExceptionRecord->ExceptionCode,8));
    else 
      ShowMessage("ExceptionRecord is NULL!");
  }
код в идеале должен перехватывать исключение, возбуждаемое в результате деления на ноль,
и выводить друг за другом два диалоговых окна: первое с сообщением "Division by zero",
второе с числом С0000094, которое соответствует коду STATUS_INTEGER_DIVIDE_BY_ZERO (как объявлено в файле winnt.h).
Однако вместо этого первое окно почему-то выводится с сообщением "EDivByZero", а второе окно
информирует, что поле ExceptionRecord в экземпляре класса исключения равно NULL.

Аналогичный код на Delphi работает "на ура" и выдаёт как раз то, что от него ожидается:
Код:
 try
   b := 0;
   a := 10;
   ShowMessage(IntToStr(a div b));
 except
   on E: EDivByZero do begin
     ShowMessage(E.Message);
     if E.ExceptionRecord<>nil then
       ShowMessage(IntToHex(E.ExceptionRecord^.ExceptionCode,8))
     else
       ShowMessage('ExceptionRecord is NIL!');
   end;
 end;
А теперь, внимание вопрос
Что это за глюк такой в компиляторе C++Builder'а

p.s.: версии -- C++Builder 6.0 Build 10.161 (Update 1), Delphi 6.0 Build 6.163, Windows 2000 Pro SP4

Последний раз редактировалось blacklist; 12.01.2005 в 04:13.
blacklist вне форума