Тема: acad 2012 acedArxUnload

Вызываю acedArxUnload(acedGetAppName()) из контекста On_kInitAppMsg, в 2010 автокаде все отрабатывает как положенно - arx спокойно выгружается. В 2012 это приводит к аварийному закрытию автокада.
Кто-нибудь может подсказать как решить проблему креша 2012 автокада при вызове acedArxUnload(acedGetAppName()); или подсказать другое решение как выгрузить свой arx?
Заранее благодарен.

(изменено: Александр Ривилис, 23 мая 2012г. 15:50:25)

Re: acad 2012 acedArxUnload

Так делать нельзя категорически, и то что оно у тебя так работало - это даже очень странно.
Правильных решений два:
1) Если проверив (например, систему защиты), приложение понимает, что грузиться ему незачем, то в On_kInitAppMsg достаточно вернуть AcRx::kRetError;
2) Для "самовыгрузки" можно использовать такой (или аналогичный) код:

ACHAR *appname = acedGetAppName();
ACHAR fname[_MAX_PATH], ext[_MAX_PATH], path[_MAX_PATH];
_tsplitpath(appname,NULL,NULL,fname, ext);
_tmakepath(path,NULL,NULL,fname,ext);
AcString buf; buf.format(_T("(arxunload \"%s\")"),path);
ads_queueexpr((ACHAR *)buf.kACharPtr());

Реальная выгрузка будет не моментальной, а тогда, когда AutoCAD получит управление.

Re: acad 2012 acedArxUnload

Спасибо большое за подсказку, особено понравилось решение с возвратом AcRx::kRetError из On_kInitAppMsg.
С "самовыгрузкой" возникли проблемы - автокад аварийно закрывается даже если выгружать приложение из интерфейса автокада (через меню автокада); похоже проблемы с самим приложением, хотя в 2010 таких проблем не было - буду разбираться.

Re: acad 2012 acedArxUnload

Александр Долгов пишет:

автокад аварийно закрывается даже если выгружать приложение из интерфейса автокада (через меню автокада);

И при возврате AcRx::kRetError из On_kInitAppMsg? Что же ты такое делаешь в нём?

Re: acad 2012 acedArxUnload

При возврате AcRx::kRetError все происходит предсказуемо - появляется окно с сообщением о невозможности загрузки arx (мы ведь отказались его загружать, вернув AcRx::kRetError); arx остается не загруженным - все работает как надо.
А вот при выгрузке уже загруженного приложения происходит крах акада, причем как при программной выгрузке, так и при выгрузке с использованием акадовского интерфейса (почему то не хочет нормально выгружаться). Есть подозрение, что в 2012 версии что то реализовано немного не так как в 2010. Автокад этим "конечно славится", при переходах на новые версии постоянно приходится дорабатывать напильником :)