Не работает try, catch в dll

Тема в разделе "LANGS.C", создана пользователем serega28, 9 июн 2009.

  1. serega28

    serega28 Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    115
    Адрес:
    Minsk
    В dll находится код:


    Код (Text):
    1. PACK_API void *dsq_extract(const BYTE *source, DWORD *noUnpackedBytes)
    2. {
    3.  
    4. ......................................
    5.  
    6.  for(WORD i = 0; i < len; ++i)
    7.  {
    8.    try
    9.    {
    10.      *to-- = to[offset];
    11.    }
    12.    catch (...)
    13.    {
    14.       *noUnpackedBytes = 0;
    15.        WtiteLogFileDSQ("Исключение 3 extract DSQ");
    16.        if (unpackBuffer != NULL) free(unpackBuffer);
    17.        return 0;
    18.    }
    19.  }
    20. }
    Обнаружил что именно вот тут ошибка, но catch не работает.
    А выскакивает виндожное мессаж: Ошибка, приложение будет закрыто.

    Почему?
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Или компилируй с /EHa, или юзай __try/__catch.
     
  3. serega28

    serega28 Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    115
    Адрес:
    Minsk
    так вот и смотрел, /EHa стоит.
     
  4. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Тогда странно. Проверяй под отладчиком.
     
  5. serega28

    serega28 Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    115
    Адрес:
    Minsk
    Сам екзешник который вызывает эту dll написан на Pure Basic.
    Если там отключена обработка исключений, то и в dll может не обрабатываться? (хотя это бред :))
     
  6. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    serega28
    Да - при возникновении исключения в любой DLL приложение будет прибито вендой автоматически.