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

20/02/2014

Совместимость макросов VBA в AutoCAD2014x64

Нередко возникают вопросы, связанные с переходом на AutoCAD 2014 x64 с более ранних версий (или с 32-разрядной версии AutoCAD 2014). Звучит это примерно так:

"Мой макрос VBA использует несколько дополнительных контролов (далее OCX) или библиотек типов (TypeLibrary). Макрос прекрасно работал в AutoCAD вплоть до версии 2014. Сейчас макрос выдает ошибку, связанную именно с этими OCX/TypeLibrary"

Объяснение кроется в том, что AutoCAD 2014 - первая версия AutoCAD, используюшая новейшую версию Microsoft VBA: 7.1, в то время как предыдущие выпуски AutoCAD использовали VBA версии не выше 6.3. VBA вплоть до 6.3 существует только 32-разрядным, а VBA 7.1 может быть и 32-, и 64-разрядным. Очевидно, что AutoCAD 2014 x64 использует именно VBA 7.1 x64. Скорее всего, Ваши дополнительные OCX или TypeLibrary являются 32-разрядными и именно по этой причине не могут быть ни загружены, ни (тем более) использованы. Невозможно загрузить 32-разрядный компонент в адресное пространство 64-битного процесса. Это и есть первая и единственная причина получения ошибки при попытке запуска макроса.

Чтобы добиться работоспособности макроса, Вам придется заменить 32-разрядные версии своих компонентов их 64-битными аналогами. Или, если таковых не существует, переделать свой проект - либо найдя обходные пути, либо использовать OCX / TypeLibrary от другого поставщика.

Причина, по которой тот же самый макрос VBA корректно работал в предыдущих версиях, проста: AutoCAD использовал VBA 6.3 как сторонний 32-разрядный процесс, общавшийся с AutoCAD посредством маршалинга (раньше подобный механизм назывался СОМ-взаимодействием). Т.е., даже несмотря на то, что AutoCAD работал как 64-битное приложение, VBA продолжал существовать как 32-битный процесс и поэтому мог использовать 32-разрядные версии дополнительных компонентов OCX / TypeLibrary.

Тот факт, что VBA запускался как сторонний процесс, был одной из причин весьма низкого быстродействия макросов в 64-разрядных AutoCAD даже по сравнению с 32-разрядными версиями (также см.статью AutoCAD, VBA и производительность). Новая версия VBA 7.1 решает проблему быстродействия, но в некоторых случаях может сослужить не самую лучшую службу.

На основе материалов http://adndevblog.typepad.com/autocad/2014/...utocad-2014-64-bit.html

Автор английского материала: Stephen Preston

Обсуждение: http://adn-cis.org/forum/index.php?topic=544

Опубликовано 20.02.2014
Отредактировано 20.02.2014 в 18:07:41