Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Михаил Голубев от 03-09-2021, 14:03:17

Название: acad.exe не отпускает .dbx файл
Отправлено: Михаил Голубев от 03-09-2021, 14:03:17
Здравствуйте
Создаю модуль .dbx с помощью визарда. Есть один класс, происходит от AcDbPolyline. В нем ничего нет еще.
Так же создаю команду в другом проекте, которая загружает данный .dbx с помощью acedArxLoad() и другую команду, которая выгружает модуль с помощью acedArxUnload(). Это делается для того, что бы быстро выгружать/компилировать/загружать модуль.

Проблема: acad.exe не отпускает данный .dbx и невозможно его переписать/удалить, хотя данный модуль не присутствует в списке модулей appload.

Как заставить acad.exe отпустить этот файл, чтобы не перегружать автокад после каждого изменения?
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Михаил Голубев от 03-09-2021, 14:04:58
Забыл добавить, что сопутствующий .arx выгружается нормально.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 14:09:24
Михаил Голубев,
Без исходного кода dbx-файла сложно что-то подсказать.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 14:12:49
Однозначно в событии AcRx::kUnloadAppMsg должен быть вызов:
Код - C++ [Выбрать]
  1. deleteAcRxClass(Твой_класс::desc());
Ну и в событии AcRx::kInitAppMsg:
Код - C++ [Выбрать]
  1. acrxDynamicLinker->unlockApplication(pkt);
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 14:22:53
Михаил Голубев,
Кстати, для загрузки dbx-файла правильнее использовать acrxLoadModule, а не acedArxLoad. Ну и для выгрузки acrxUnloadModule.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Михаил Голубев от 03-09-2021, 14:46:07
Спасибо за ответ. Попробовал все предложения -- не работает. :(

Загружаю теперь подуль acrxLoadModule() и выгружаю acrxUnloadModule().

Добавил в:

Код - C++ [Выбрать]
  1.          virtual AcRx::AppRetCode On_kInitAppMsg(void* pkt)
  2.         {
  3.  
  4.                 acrxDynamicLinker->unlockApplication(pkt);
  5.  
  6.                 AcRx::AppRetCode retCode = AcRxDbxApp::On_kInitAppMsg(pkt);
  7.  
  8.  
  9.                 acrxRegisterService(DRIPOLYLINE_DBXSERVICE);
  10.  
  11.                 return (retCode);
  12.         }
  13.  
  14.         virtual AcRx::AppRetCode On_kUnloadAppMsg(void* pkt)
  15.         {
  16.                 AcRx::AppRetCode retCode = AcRxDbxApp::On_kUnloadAppMsg(pkt);
  17.  
  18.                 delete acrxServiceDictionary->remove(DRIPOLYLINE_DBXSERVICE);
  19.                 deleteAcRxClass(DRIPolyline::desc());
  20.  
  21.                 return (retCode);
  22.         }
  23.  

Сам класс прилага, но, как сказано, там ничего нет...
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 14:56:53
А если так:
Код - C++ [Выбрать]
  1.         virtual AcRx::AppRetCode On_kUnloadAppMsg(void* pkt)
  2.         {
  3.                 delete acrxServiceDictionary->remove(DRIPOLYLINE_DBXSERVICE);
  4.                 deleteAcRxClass(DRIPolyline::desc());
  5.                 AcRx::AppRetCode retCode = AcRxDbxApp::On_kUnloadAppMsg(pkt);
  6.                 return (retCode);
  7.         }
Если не поможет - давай полный проект.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Михаил Голубев от 03-09-2021, 15:12:33
Не помогло... Проект прилагается по ссылке.

https://drive.google.com/file/d/1a78fi3brYCckhVu0zNtspVx5A9d7LDVO/view?usp=sharing
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 15:37:13
Михаил Голубев,
47Мб мусора? Однако! Посмотрю проект вечером.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 15:46:36
Михаил Голубев,
Хм. Ты сделал dbx-проект с поддержкой .NET? Вот и всё. Его нельзя будет выгрузить.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Михаил Голубев от 03-09-2021, 15:52:40
Спасибо :)
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Александр Ривилис от 03-09-2021, 16:02:56
Спасибо :)
Попробуй всё тоже самое проделать без .NET. Вообще же по моему опыту не следует рассчитывать на возможность выгрузки приложений. Я почти всегда перезапусаю при отладке AutoCAD.
Название: Re: acad.exe не отпускает .dbx файл
Отправлено: Михаил Голубев от 05-09-2021, 00:04:07
Да, все заработало, спасибо.