Проблема с DLL (COM-Сервера) c IBX компонентами внутри
Модератор: kdv
Проблема с DLL (COM-Сервера) c IBX компонентами внутри
Приветствую коллег!
При переходе с IB 2007 Desktop на FB2.0 Embedded возникла следующая проблема:
Имеется приложение EXE шник, через TIBDatabase цепляется к файлу БД. Запускается из EXEшника DLL-ка, которая по такому же компоненту цепляется к файлу БД. Файлы правильные для каждого сервера. т.е. Залиты путем БакапРестора под каждый сервер.
Собственно сама проблема: В случае с FB, если в DLL-ке будет вызвано исключение по любому поводу или ошибка SQL-запроса, то Exe-шник более не выгружается из памяти. Хотя окно выгружает, но сам процесс не выгружается и в окне процессов остается. Надо его убивать принудительно. На IB 2007 да и на любом другом IB это го нет.
Кто-нибудь знает почему эта проблема проявляется на FB Embedded? Может есть что-то чего я не учел? Может надо как-то хитро отлавливать и обрабатывать исключительные ситуации и ошибки SQL?
Заранее всем откликнувшимся благодарен!
Однако, должен признаться, что заметил, что теперь и с IB2007 тоже самое... Никто не в курсе что может быть?
При переходе с IB 2007 Desktop на FB2.0 Embedded возникла следующая проблема:
Имеется приложение EXE шник, через TIBDatabase цепляется к файлу БД. Запускается из EXEшника DLL-ка, которая по такому же компоненту цепляется к файлу БД. Файлы правильные для каждого сервера. т.е. Залиты путем БакапРестора под каждый сервер.
Собственно сама проблема: В случае с FB, если в DLL-ке будет вызвано исключение по любому поводу или ошибка SQL-запроса, то Exe-шник более не выгружается из памяти. Хотя окно выгружает, но сам процесс не выгружается и в окне процессов остается. Надо его убивать принудительно. На IB 2007 да и на любом другом IB это го нет.
Кто-нибудь знает почему эта проблема проявляется на FB Embedded? Может есть что-то чего я не учел? Может надо как-то хитро отлавливать и обрабатывать исключительные ситуации и ошибки SQL?
Заранее всем откликнувшимся благодарен!
Однако, должен признаться, что заметил, что теперь и с IB2007 тоже самое... Никто не в курсе что может быть?
Последний раз редактировалось sdsfy 25 сен 2009, 01:12, всего редактировалось 1 раз.
Re: FB 2.0 Embedded + Delphi2007
какие-то проблемы в dll. она должна транслировать exception в exe, собственно, вообще коннект из dll обычно работает "плохо", в том смысле что рекомендуют такие dll делать как package (пакет).
Re: FB 2.0 Embedded + Delphi2007
пока все в DLL работало через DBE к Interbase, все выгружалось. Именно с переходом на IBX возникли эти глюки. Стало быть DLL работает без проблем с компонентами BDE?
В любом случае, софту уже много лет и куча DLL. Переделать будет крайне сложно да и практически нереально...
По ходу проблема решилась вот как. Есть такой модуль IBSQLMonitoring, в нем лежит процедура DisableMonitoring. если ее вызвать до начала любых коннектов и иных операций с БД, то даже при ошибках работы с БД, прочих исключениях связанных с работой БД через компоненты IBX библиотека выгружается. Эта проблема с IBX известна и наиболее хорошо в англоязычных ресурсах освещена.
Пока буду тестировать, если что - отпишусь. И если все будет ок, переименуем тему, чтоб людям тоже польза при поисках была.
В любом случае, софту уже много лет и куча DLL. Переделать будет крайне сложно да и практически нереально...
По ходу проблема решилась вот как. Есть такой модуль IBSQLMonitoring, в нем лежит процедура DisableMonitoring. если ее вызвать до начала любых коннектов и иных операций с БД, то даже при ошибках работы с БД, прочих исключениях связанных с работой БД через компоненты IBX библиотека выгружается. Эта проблема с IBX известна и наиболее хорошо в англоязычных ресурсах освещена.
Пока буду тестировать, если что - отпишусь. И если все будет ок, переименуем тему, чтоб людям тоже польза при поисках была.
Re: FB 2.0 Embedded + Delphi2007
Вы уже сами нашли причину в IBSQLMonitoring.Именно с переходом на IBX возникли эти глюки. Стало быть DLL работает без проблем с компонентами BDE?
спасибо за информацию, на русскоязычных форумах я такого не встречал. Впрочем, наверняка потому что коннект из ДЛЛ делают редко.Эта проблема с IBX известна и наиболее хорошо в англоязычных ресурсах освещена.
Re: FB 2.0 Embedded + Delphi2007
НА самом деле, там COM-Сервер упакованный в DLL. Но в любом случае, похоже правила IBX одинаковы и для COM и для простых DLL.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: Проблема с DLL (COM-Сервера) c IBX компонентами внутри
Было бы удивительно, если бы правила отличались, поскольку COM-сервер это и есть простая DLL с некоторым предопределённым интерфейсом.
Re: Проблема с DLL (COM-Сервера) c IBX компонентами внутри
На сколько я понимаю, не обязательно чтоб COM - сервер находился внутри DLL. Он вполне может находиться и в Exe. DLL для COM - сервера экспортирует 4 небезызвестные функции. Собственно это и делает DLL носителем COM-Сервера. И на сколько я помню, DLL может носить только внутрипроцессные COM сервера, т.к. отдельного процессного потока создавать не в состоянии.Dimitry Sibiryakov писал(а):Было бы удивительно, если бы правила отличались, поскольку COM-сервер это и есть простая DLL с некоторым предопределённым интерфейсом.
Но Возвращаясь к рассуждениям о проблемах с IBX, скорее всего надо говорить, что проблема не в COM а в DLL, поскольку эксперименты мои и коллег (наших и западных), опираются либо на чистые DLL либо на COM заключенных в DLL. О других проблемах IBX в COM (вне DLL) ничего не знаю.