ADN Club > VBA

VBA и 64-битный AutoCAD 2008-2013

(1/2) > >>

Gektor:
Здравствуйте!
В 64-битных версиях AutoCAD 2008-2013 мы столкнулись со следующей проблемой:
Если была запущена программа на VBA, то при выходе из AutoCAD (либо при применении команды VBAUNLOAD) появляется запрос о сохранении изменений в VBA-проект.
Если на запрос ответить "Да", то сообщение больше не появляется, но при переходе на другую версию AutoCAD (например, с 2011 на 2013) возможно возникновение проблем (сообщения об ошибках, неадекватная реакция на действия пользователя и т.п.), не позволяющих нормально пользоваться данной программой.

Исследование показало, что AutoCAD пытается включить в проект VBA библиотеку типов (type library) текущей версии AutoCAD. Наличие в проекте ссылки на конкретную библиотеку типов препятствует нормальной работе программы при переходе в другую версию AutoCAD. В 32-битном AutoCAD такой проблемы не наблюдается. Ссылки на библиотеку типов не пытаются привязаться "намертво" к конкретной версии AutoCAD.

Есть ли способ решения данной проблемы?
Рекомендация AutoDesk о переходе на "нормальные" средства разработки нам известна, но, к сожалению, единомоменто в полном объеме осуществить данный переход невозможно.

Александр Ривилис:
Необходимы уточнения. Речь идёт только о 64-битных версиях AutoCAD? Описанный переход с версии 2011 на версию 2013 касается только x64? Или переход с 2011 x86 к 2013 x64 приводит к тем же результатам? Зависит ли это поведение от VBA-кода или такое происходит даже на самом простом проекте?

Я к сожалению не могу проверить у себя этот факт, т.к. версии x64 у меня не установлены. В связи с тем, что Microsoft не поддерживала VBA в среде x64, сотрудники Autodesk «героическими усилиями» сделали эту поддержку самостоятельно, используя межпроцессное взаимодействие, в связи с чем часть функций/методов попросту не работает, часть работает на порядок медленнее, чем в x86 (это не касается версии AutoCAD 2014).

Объектная модель от версии к версии претерпевает изменения и поэтому гарантировать работоспособность VBA-модуля во всей указанной линейке AutoCAD вряд ли удастся. Как вариант решения проблемы возможно наличие VBA-модулей для каждой из версий AutoCAD (или для линейки из трёх версий).

Чтобы не появлялось сообщение о сохранении VBA-проекта можно попробовать сделать хук на это диалоговое окно. Это делается средствами ObjectARX (с использованием Windows API) под линейку из трёх версий AutoCAD, отдельно для x86, отдельно для x64.

Ну и конечно совет о портировании приложения с платформы VBA на .NET самый правильный и актуальный.

P.S.: Я могу передать этот вопрос в ADN DevHelp, если Вы подготовите 100% воспроизводимый тест, с скриншотами, описанием и т.д. И не забудьте, что ответы от DevHelp только на последние три версии AutoCAD.

Алексей Кулик:
Не видя кода, тяжело что-либо советовать.

Повторяется ли ситуация, если DVB-проект загрузить в "пустой" профиль AutoCAD? Может быть, будет иметь смысл отключить автоматически загружаемые модули (кажется, имя файла должно быть наподобие acad.dvb и лежать он должен в путях поддержки)?
Повторяется ли ситуация, если сначала принудительно в файле dwg удалить записи о словарях VBA, а потом уже принудительно загрузить dvb-модуль?

Gektor:

--- Цитата: Александр Ривилис от 01-07-2013, 15:57:41 ---Необходимы уточнения. Речь идёт только о 64-битных версиях AutoCAD? Описанный переход с версии 2011 на версию 2013 касается только x64? Или переход с 2011 x86 к 2013 x64 приводит к тем же результатам? Зависит ли это поведение от VBA-кода или такое происходит даже на самом простом проекте?
--- Конец цитаты ---

Да, речь идет только о 64-битных версиях AutoCAD (кроме 2014). Описанный переход касается только х64. Переход с любой х86 на любую х64 проходит нормально, за исключением запроса о сохранении проекта, в результате которого "все ломается". Поведение наблюдается во всех, даже простых проектах которые мне доступны. Насколько я могу судить, проблема возникает только при обращении к чертежу, т.е. если просто вызвать и сразу же закрыть диалоговое окно запроса может и не быть.


--- Цитата: Алексей Кулик от 01-07-2013, 16:07:56 ---Повторяется ли ситуация, если DVB-проект загрузить в "пустой" профиль AutoCAD? Может быть, будет иметь смысл отключить автоматически загружаемые модули (кажется, имя файла должно быть наподобие acad.dvb и лежать он должен в путях поддержки)?
--- Конец цитаты ---

Повторяется при любом профиле на любой машине. Все dvb-модули загружаются принудительно.


--- Цитата: Алексей Кулик от 01-07-2013, 16:07:56 ---Повторяется ли ситуация, если сначала принудительно в файле dwg удалить записи о словарях VBA, а потом уже принудительно загрузить dvb-модуль?
--- Конец цитаты ---

Разве в новом чертеже есть какие-то записи о VBA? Штатные средства ("Диспетчер VBA") ничего не показывают.


--- Цитата: Александр Ривилис от 01-07-2013, 15:57:41 ---P.S.: Я могу передать этот вопрос в ADN DevHelp, если Вы подготовите 100% воспроизводимый тест, с скриншотами, описанием и т.д. И не забудьте, что ответы от DevHelp только на последние три версии AutoCAD.
--- Конец цитаты ---

Попробую сделать чистый тестовый пример и испытать на нем. О результатах сообщу в этой же теме.

Алексей Кулик:

--- Цитата: Gektor от 01-07-2013, 17:14:12 ---Разве в новом чертеже есть какие-то записи о VBA? Штатные средства ("Диспетчер VBA") ничего не показывают.
--- Конец цитаты ---
Эти средства и не покажут. Тем не менее записи в соответствующем словаре могут присутствовать.
P.S. В общем и целом поддерживаю Александра во мнении:
--- Цитата: Александр Ривилис от 01-07-2013, 15:57:41 ---Как вариант решения проблемы возможно наличие VBA-модулей для каждой из версий AutoCAD (или для линейки из трёх версий).
--- Конец цитаты ---

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии