перехват RaiseException

Тема в разделе "WASM.WIN32", создана пользователем gambler, 13 сен 2007.

  1. gambler

    gambler New Member

    Публикаций:
    0
    Регистрация:
    17 май 2007
    Сообщения:
    10
    Здравствуйте!
    Как правильно перехватить RaiseException ?
    При (1) исключении все работает нормально ...
    Появляется окно "MyRaiseException working", а затем окно "exception".
    При (2) исключении MyRaiseException "зацикливается", т.е. раз 5 появляется окно "MyRaiseException working",
    а до окна "exception" не доходит, и все заканчивается "access violetion" :dntknw:

    Код (Text):
    1. void __fastcall TForm1::Button1Click(TObject *Sender)
    2. {
    3.  try
    4.   {
    5.    (1) StrToInt("except");
    6.    (2) int s = 5/StrToInt("0");
    7.   }
    8.  catch(...)
    9.   {
    10.    ShowMessage("exception");
    11.   }
    12. }
    13.  
    14. void __fastcall TForm1::Button2Click(TObject *Sender)
    15. {
    16.   pfnCurrent = GetProcAddress(GetModuleHandle("Kernel32"), "RaiseException");
    17.   HANDLE pfnNew = MyRaiseException;
    18.  
    19.   // Код Рихтера, ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller)  
    20.   ...
    21.   ...
    22.   ...
    23. }
    24.  
    25. typedef void (WINAPI *Raise_Exception)(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, const ULONG_PTR* lpArguments);
    26.  
    27. void MyRaiseException(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, const ULONG_PTR* lpArguments)
    28. {
    29.   ShowMessage("MyRaiseException working");  
    30.   ((Raise_Exception)pfnCurrent)(dwExceptionCode, dwExceptionFlags, nNumberOfArguments, lpArguments);
    31. }