Тема: Как получить сообщение, что сессия AutoCAD будет закрыта?

В ObjectARX 2002 как написано в хелпе AcEditorReator::beginQuit() вызывается перед тем как будет запушен процесс закрытия Автокада. Так оно и было как написано.
В ObjectARX 2004 хелп не изменился, никаких коментариев по поводу изменения beginQuit нет.
Однако! Перед тем как вызывается оная функция в реакторе успевает произойти следующее:
Закрываются все документы и выгружаются все меню и тулбары. Остается голое приложение и тут радостно  вызывается beginQuit.
Это правильно?
И соответственно у меня вопрос к знатокам.
Как еще можно получить сообщение о том что сессия автокада собирается быть закрытой, однако все поинтеры и интерфейсы еще валидны???
Заранее благодарен.

Re: Как получить сообщение, что сессия AutoCAD будет закрыта?

К сожалению,эта проблема существует и в AutoCad 2005.Не проверяла в ObectArx,но в VBA она имеет место быть.Хотя старый добрый LISP еще держится : переопределенная команда C:QUIT отлично реагирует на все действия,которые нужно выполнить до закрытия автокада.
Но в AutoCad 2005 ee можно запустить лишь непосредственным вызовом,а не при закрытии окна автокада,как было в AutoCad 2002.Event BeginQuit - спит.
Может быть,кто-нибудь уже нашёл решение этой проблемы?Заранее благодарна.

Re: Как получить сообщение, что сессия AutoCAD будет закрыта?

Я где-то наткнулся на такое решение:

// Недокументированная функция возвращает TRUE если AutoCAD находится в процессе закрытия
extern bool AcadIsQuitting(void);
//пример использования:
void UnloadApplication()
{
    delete DocReac;
    delete m_wndMDITabs;
    if (!AcadIsQuitting())
        acedGetAcadFrame()->RecalcLayout();
}

Re: Как получить сообщение, что сессия AutoCAD будет закрыта?

Дело в том, что когда вызывается UnloadApplication при закрытии сессии AutoCAD-а - то уже финита ля комедия - нельзя толком ничего сделать в AcDbDatabase... Косячит даже save... можно только выгрузить свои классы, разрегистрять команды и поубивать занятую память, поосвобождать реакторы...
Если нужны какие-то "более сложные" действия, то я не помню, но есть реактор - в нем есть событие типа beginQuitWillStart - зовется до всего, (в том числе до вопросов а надо ли записывать файлики - тут вроде еще работает и валидно), а вот beginQuit теперь приходит по факту закрытия самой сессии т.е. документы уже закрыты и менюшки выгружены...
Может это и правильно... НО!!! Поведение beginQuit в 2002 и 2004/5/6 отличается как я описал выше и главное что про это в хелпах нигде ничего не сказано... А это уже не правильно

Re: Как получить сообщение, что сессия AutoCAD будет закрыта?

]> KonstantinM (2005-06-19 13:07:54)
Может это и правильно... НО!!! Поведение beginQuit в 2002 и 2004/5/6 отличается как я описал выше и главное что про это в хелпах нигде ничего не сказано... А это уже не правильно

Это действительно неправильно. Эту информацию донесли только для авторизированных разработчиков на сайте ADN.
Кстати есть еще и AcApDocManagerReactor со своим методом documentToBeDestroyed, в котором тоже можно кое-что проанализировать, и если это последний незакрытый документ, то учесть, что AutoCAD перейдет в состояние ZeroDocument, будет выгружено меню, исчезнут тулбары и т.д.