Имеется следующий, довольно таки незамысловатый, код:
Код:
__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