Текущий архив: 2002.06.17;
Скачать: CL | DM;
ВнизEIntOverflow :???: Найти похожие ветки
← →
Бадян (2002-06-05 11:47) [0]Привет, многоуважаемые.
Простите, что на C.
void __fastcall TForm1::DigitSpeedButtonClick(TObject *Sender)
{
__int32 a=0xFFFFFF;
try
{
a = a*0xFFFF;
}
catch (EIntOverflow &e)
{
MessageBox(NULL, "IntOverflow", "", MB_OK);
}
}
Вот так не работает, однако. Чем лечить? На дельфях можно тыкнуть {$Q+}. Дык все равно не работает. Почему не выскакивает экцепшин? Другие ведь выскакивають (EDivByZero).
Заранее благодарю.
← →
Игорь Шевченко (2002-06-05 12:02) [1]Посмотрите в отладчике, какие флажки выставляются после операции
← →
Бадян (2002-06-05 13:10) [2]Если написать a = a*a;
OF, как миленький, устанавливается.
Но уст. или не уст. OF нет никакой разницы. EIntOverflow все равно не вылезает. Хоть клаву грызи...
← →
Игорь Шевченко (2002-06-05 13:21) [3]a*((__int32)0xFFFF) что получится ? :-)
← →
Бадян (2002-06-05 13:40) [4]Мда...
Но все же?
← →
Внук (2002-06-05 13:59) [5]Если Вам действительно нужно получить этот Exception, то это не так просто :)
Но, сдается мне, что Вам нужен ERangeError (см. его описание в Help)
← →
Внук (2002-06-05 14:12) [6]Но, если хотите, то вот:
...
uses Math;
...
procedure TForm1.Button1Click(Sender: TObject);
var Params:array[1..4] of Integer;
Res:Integer;
begin
{$Q+}
{$R-}
Res:=0;
Params[1]:=$7FFF0000;
Params[2]:=$FFF0;
Params[3]:=$F;
Params[4]:=$F;
try
Res:=SumInt(Params);
except
on E:EIntOverflow do ShowMessage("EIntOverflow");
on E:Exception do ShowMessage("Another Exception");
end;
ShowMessage(IntToStr(Res));
{$Q-}
end;
← →
MAxiMum (2002-06-05 14:25) [7]Может компилятор выкинул операцию с переменной A в следствии ее несипользованности.
← →
Внук (2002-06-05 14:39) [8]MAxiMum © (05.06.02 14:25)
Нет, просто там происходит ERangeError, если {$R+} включено, конечно :)
Страницы: 1 вся ветка
Текущий архив: 2002.06.17;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.007 c