Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Builder XE5. TADOConnection. try catch. Не работает. / 16 сообщений из 16, страница 1 из 1
28.12.2017, 17:39
    #39577493
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
Здравствуйте, коллеги!

Пишу dll на Embarcadero C++ Builder XE5.
Для соединения с БД на MS SQL Server использую компонент TADOConnection.
//======
try {SQLConnection->Connected = true;}
catch(...)
{
// обработка исключения
};
//======
Всё работает замечательно до тех пор, пока сервер не оказывается недоступен по той или иной причине.
Дело в том, что обычный способ отлова исключений (try catch) не срабатывает, если запускать приложение не из под IDE, и программа аварийно завершает работу.
Есть подозрение, что это, вообще, баг XE5.
Если кто-то сталкивался с этой или подобной проблемой и решил её, прошу подсказать.
...
Рейтинг: 0 / 0
29.12.2017, 09:33
    #39577703
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrk,

а чем отличается try от __try помните?
...
Рейтинг: 0 / 0
29.12.2017, 10:15
    #39577731
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
Навскидку. __try используется с __except и __finally. Это не c++ конструкция, на сколько я понимаю, а надстройка среды.
__try __except тоже, кстати, пробовал для отлова этого исключения. Эффект тот же.
...
Рейтинг: 0 / 0
29.12.2017, 11:17
    #39577769
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrkНавскидку. __try используется с __except и __finally. Это не c++ конструкция, на сколько я понимаю, а надстройка среды.
__try __except тоже, кстати, пробовал для отлова этого исключения. Эффект тот же.
а какая ОСь? на Win XP были с какими-то исключениями похожие проблемы

попробуйте сами сгенерить исключения, поймает например?:
языковое исключение

деление на ноль
...
Рейтинг: 0 / 0
29.12.2017, 11:26
    #39577777
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
автора какая ОСь?
Windows 7.

try {1/0;}
catch(...)
{
// обработка исключения
};

Отлавливается замечательно.
...
Рейтинг: 0 / 0
29.12.2017, 13:07
    #39577850
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrkПишу dll на Embarcadero C++ Builder XE5.
try {}
catch(...)
{
// обработка исключения
};
//======
Всё работает замечательно до тех пор, пока сервер не оказывается недоступен по той или иной причине.
Дело в том, что обычный способ отлова исключений (try catch) не срабатывает, если запускать приложение не из под IDE, и программа аварийно завершает работу.
Есть подозрение, что это, вообще, баг XE5.
Если кто-то сталкивался с этой или подобной проблемой и решил её, прошу подсказать.

Речь о 32 битном или 64 битном варианте?
...
Рейтинг: 0 / 0
29.12.2017, 14:25
    #39577927
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
авторРечь о 32 битном или 64 битном варианте?

64
...
Рейтинг: 0 / 0
29.12.2017, 15:22
    #39577956
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrk,
в документации пример такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 try
    {
        ADOConn->Connected = true;
    }
    catch (EADOError *e)
    {
        MessageDlg("Error while connecting", mtError,
                      TMsgDlgButtons() << mbOK, 0);
        return;
    }
...
Рейтинг: 0 / 0
29.12.2017, 19:32
    #39578056
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
d7i,

Документация читана. Собсна по ней и написан мой код (см. вопрос топика) - от вашего примера отличается только указанием класса исключения. Так тоже не работает. Пробовал.
...
Рейтинг: 0 / 0
29.12.2017, 19:43
    #39578057
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
Забыл добавить. Экземпляр TADOConnection создаю динамически. То есть нет формы, нет компонента на форме.

// В заголовочном файле:
class TMyClass {

//...

private:
TADOConnection* SQLConnection;
};

//...

// В конструкторе TMyClass:
//...
try {SQLConnection = new TADOConnection(0);}
catch(...)
{
// обработка
};

//...

try {SQLConnection->Connected = true;}
catch(...)
{
// обработка (исключение не ловится, вопрос топика)
};
//...
...
Рейтинг: 0 / 0
29.12.2017, 19:45
    #39578058
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrk,

на 7-ке вроде всё норм было
случайно, не в потоке делаете это?
...
Рейтинг: 0 / 0
30.12.2017, 14:34
    #39578230
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
kealon(Ruslan),

авторслучайно, не в потоке делаете это?
1. Почти уверен, что в основном (и единственном) потоке всё происходит. Скажем так, в DLL дополнительных потоков не создаю, а вызывающее приложение не моего авторства, но там, скорее всего, тоже дополнительных потоков нет. А если не в основном потоке меня вызывают, что это меняет?
2. При сборке на MS VC обсуждаемое исключение замечательно отлавливается. Тут дело не в ОС.
...
Рейтинг: 0 / 0
30.12.2017, 17:11
    #39578267
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrkkealon(Ruslan),

авторслучайно, не в потоке делаете это?
1. Почти уверен, что в основном (и единственном) потоке всё происходит. Скажем так, в DLL дополнительных потоков не создаю, а вызывающее приложение не моего авторства, но там, скорее всего, тоже дополнительных потоков нет. А если не в основном потоке меня вызывают, что это меняет?
2. При сборке на MS VC обсуждаемое исключение замечательно отлавливается. Тут дело не в ОС.
с рантайм-библами собранное скорее всего, так?

потоки да, скорее всего не при чём тогда
...
Рейтинг: 0 / 0
31.12.2017, 07:34
    #39578344
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
что там в этом Билдере -- один борланд уже только знает.
Тебе придется повторить подвиг Орфея...
...
Рейтинг: 0 / 0
09.01.2018, 15:55
    #39581131
andrandrk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
авторс рантайм-библами собранное скорее всего, так?

Собирал со снятым флагом "Build with runtime packages". Решил взвести флаг и пересобрать. Ошибка отловилась.
Учитывая эту вводную, можно что-то сделать?
...
Рейтинг: 0 / 0
09.01.2018, 16:07
    #39581141
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Builder XE5. TADOConnection. try catch. Не работает.
andrandrkавторс рантайм-библами собранное скорее всего, так?

Собирал со снятым флагом "Build with runtime packages". Решил взвести флаг и пересобрать. Ошибка отловилась.
Учитывая эту вводную, можно что-то сделать?
объекты исключений в разных библиотеках создаются и соответственно вызывающий не знает что ей за пофигень подсунули и поймать не может

кухню всю покажи как вызываешь и куда идёт вызов, обычно такие дела кодами возврата делаются или SafeCall можно использовать для облегчения
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Builder XE5. TADOConnection. try catch. Не работает. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]