Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1124979182
Sphinx
2005-08-25 18:13
2005.10.02
Странная ошибка


4-1123564499
ANB
2005-08-09 09:14
2005.10.02
Как получить номер версии своей программы ?


3-1124450354
RusLAN_
2005-08-19 15:19
2005.10.02
FireBird 1.5 . Не работает Upper .


1-1126600658
keal
2005-09-13 12:37
2005.10.02
как сделать иконку в трее в консольной программе?


1-1126116257
The Only
2005-09-07 22:04
2005.10.02
bdu?