Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
Как перенаправить ошибку, WinAPI Найти похожие ветки
← →
NikNet © (2005-08-22 16:33) [0]Не знаю как на DELPHI но на VС выгледит так?
__except( EXCEPTION_CONTINUE_EXECUTION )
Вот мне также надо сделать только на DELPHI?
Вез вывода разных ошибочных сообщение! Даже если я введу
команды I/O
← →
tesseract © (2005-08-22 16:40) [1]try
здесь проблемный блок
except
OnHandleError do ParseError ;
end;
в Delphi ошибки это объекты, когда у тебя случается ошибка запоминаешь её имя и прописываешь вместо OnHandleError. в do можешь ничего не писать, но лучше функцию обработки ошибки.
← →
Игорь Шевченко © (2005-08-22 16:40) [2]try
...что-то
except
...что-то
end;
..продолжение выполнения
← →
NikNet © (2005-08-23 09:59) [3]Мне надо обойти ошибку таким образом что бы программа
не выводила ошибку! И принемала ошибку как нормальную
выполнившися код! Это очень не обходима!
Может чуть выше я не так объяснил но я привиду код на VC.int
ExceptionFilter(
int ex
)
{
if ( ex == EXCEPTION_PRIV_INSTRUCTION ) {
return EXCEPTION_CONTINUE_EXECUTION;
} else {
return EXCEPTION_CONTINUE_SEARCH;
}
}
///////////////////////////////////////////////////////////////////////////////
// MakeBeep
///////////////////////////////////////////////////////////////////////////////
VOID
MakeBeep (
ULONG uPitch
)
{
__try {
_asm {
mov al, 10110110b
out 43h, al
mov eax, uPitch
out 42h, al
mov al, ah
out 42h, al
// speaker ON
in al, 61h
or al, 11b
out 61h, al
}
Sleep( 100 );
_asm {
// speaker OFF
in al, 61h
and al, 11111100b
out 61h, al
}
} __except ( ExceptionFilter(GetExceptionCode()) ) {
;
}
}
Вот это надо реализовать на DELPHI.
Я не знаю какой исходный файл в DELPHI для ошибок
и не знаю придусмотрели BORLAND для DELPHI такую ошибку
EXCEPTION_CONTINUE_EXECUTION. Хотя может есть но не знаю
кокое имя для не её они создали :(
← →
Игорь Шевченко © (2005-08-23 10:46) [4]
> Я не знаю
> и не знаю
Ученье свет, неученье тьма
← →
NikNet © (2005-08-23 16:40) [5]ПОМОГИТЕ?
← →
Zeqfreed © (2005-08-23 17:04) [6]NikNet © (23.08.05 16:40) [5]
Насколько я понимаю, на Delphi это будет выглядеть так:procedure MakeBeep(uPitch : Integer);
begin
try
asm
mov al, 10110110b
out 43h, al
mov eax, uPitch
out 42h, al
mov al, ah
out 42h, al
//speaker ON
in al, 61h
or al, 11b
out 61h, al
end;
sleep(100);
asm
//speaker OFF
in al, 61h
and al, 11111100b
out 61h, al
end;
except
on EPrivilege do ;
end;
end;
p.s. Только не удивляйся, что:
1. Процедура не будет работать, так как запись в порт является привилегированной инструкцией (о чем, собственно и сообщает исключение)
2. При запуске из IDE Delphi с включенной опцией "Stop on Delphi exceptions" при возникновении исключения вылетит ошибка, собственно, и сообщающая о этом прискорбном факте.
← →
NikNet © (2005-08-23 17:38) [7]Zeqfreed © (23.08.05 17:04) [6]
2. При запуске из IDE Delphi с включенной опцией "Stop on Delphi exceptions" при возникновении исключения вылетит ошибка, собственно, и сообщающая о этом прискорбном факте.
А как сделать что бы она не останавливвала?
← →
Игорь Шевченко © (2005-08-23 17:47) [8]
> А как сделать что бы она не останавливвала?
Не писать такую программу, например.
← →
Zeqfreed © (2005-08-23 17:59) [9]NikNet © (23.08.05 17:38) [7]
Я бы посоветовал тебе "взять в руки" отладчик и протрассировать данную процедурку. Если ты это сделаешь, то увидишь, что уже на строкеout 43h, al
будет сгенерировано исключение и выполнение программы продолжится с участка обработки исключительной ситуации, т.е. будет выполнен код находящийся послеexcept
. Таким образом, без особых привелегий данная процедура является абсолютно неработоспособной, точнее, не несет какой-либо ф-циональной нагрузки.
> А как сделать что бы она не останавливвала?
Вариант 1: Запускать программу не из IDE
Вариант 2: Отключить опцию "Stop on Delphi exceptions" (Tools -> Debugger Options..., закладка Language exceptions)
Вариант 3: см. Игорь Шевченко © (23.08.05 17:47) [8]
← →
alpet © (2005-08-23 18:41) [10]NikNet © (23.08.05 17:38) [7]
Не используй прямой доступ к hardware, воспользуйся лучше функцией Beep.
← →
tesseract © (2005-08-25 11:30) [11]
try
здесь проблемный блок
except
On EPrivilege do ParsePrivError;
end;
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.097 c