ADN Club > ObjectARX
.ARX в качестве загрузки сторонних DLL
gudronov:
Делаю простейший "родной" .arx, при инициализации загружаю DLL (loadlibrary), написанный на Delphi. Захватываю произвольные точки входа, по Invoke зову основной обработчик, по Loaddwg делаю Defun. Использую базу, Interbase. Все работает прекрасно, пока по причине ошибки IB (нет базы, невозможно удалить запись по причине ограничений FK-PK и т.д.) не возникает "мягкое" исключение в делфяровской DLL. Результат - по завершении кад не выгружается из памяти. Использую исключительно готовые классы в виде TIBInterbase, TIBTransaction, TIBSQL, больше никаких. Подозреваю, что надобно опускаться до уровня API, пока не пробовал. Основная версия када - 2002, на ней это и творится. Eсли несложно, выскажите свои соображения.
Александр Ривилис:
1) Ничего не увидел по поводу FreeLibrary
2) Ничего не знаю про Delphi
3) Происходит ли освобождение ресурсов при возникновении исключения?
4) Возможно ошибки в стандартных классах.
5) Переключаешь ли ресурсы на Delphi-dll во время выполнения кода из неё и возвращаешь ли их обратно?
6) На каждый CreateInstance должен быть Release
Вопросов может быть масса.
Напомню, что AutoCAD 2002 уже десять лет как не поддерживается, а связка ObjectARX-Delphi не поддерживалась никогда.
P.S.: Приветствую на форуме! :)
gudronov:
1) Ничего не увидел по поводу FreeLibrary
По финализации .arx, выгружаю по handle.
2) Ничего не знаю про Delphi
Delphi XE.
3) Происходит ли освобождение ресурсов при возникновении исключения?
Не возникает.
4) Возможно ошибки в стандартных классах.
Не знаю, не отлаживал, потому и точу зуб на API. Исключение, вроде "мягенькое"... Так просто ошибка сервера БД проскакивает. Кстати, SMP2009.
5) Переключаешь ли ресурсы на Delphi-dll во время выполнения кода из неё и возвращаешь ли их обратно?
Вот тут можно поподробнее? Я, собственно, последний раз такие выверты делал сто лет назад по кадом 14...
6) На каждый CreateInstance должен быть Release
Не скажу, механизма в совершенстве не знаю.
Вопросов может быть масса.
Напомню, что AutoCAD 2002 уже десять лет как не поддерживается, а связка ObjectARX-Delphi не поддерживалась никогда.
Да вот, придется все равно покупать последнюю версию, ................, но ребята привыкли работать в интерфейсе 2002.
P.S. Просто примитивов я там творю - LWPOLYLINE, POINT, IMAGE командой, TEXT. Все.
P.P.S. Спасибо, что откликнулись, протестирую под еще всеми устонавившиемися версиями када, отпишусь дня через 2. Системы покупные вплоть до server 2012.
Off: был рад Вас услышать.
Сообщение почистил. Перечитай правила форума /* Александр Ривилис */
Александр Ривилис:
--- Цитата: gudronov от 12-04-2014, 22:53:34 --- Вот тут можно поподробнее? Я, собственно, последний раз такие выверты делал сто лет назад по кадом 14...
--- Конец цитаты ---
http://adn-cis.org/mfc-problemyi-s-cacmoduleresourceoverride.html
--- Цитата: gudronov от 12-04-2014, 22:53:34 ---3) Происходит ли освобождение ресурсов при возникновении исключения?
Не возникает.
--- Конец цитаты ---
Не понял.
gudronov:
Спасибо, насчет ресурсов стало понятно. Однако, я, похоже, всех ввел в заблуждение. Нужно было первым делом проверить выгрузку моих DLL при arxunload. Только сейчас заметил: FreeLibrary отрабатывает (финализация DLL проходит), а вот обратно в .arx управление не приходит. Так что это 99% не из за автокада, а из-за моих не очень прямых рук, буду отлаживаться дальше. Но за советы спасибо, кой-чего я не знал...
Навигация
Перейти к полной версии