ADN Club > VBA

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

<< < (2/2)

Gektor:

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

--- Конец цитаты ---

Как и обещал, сделал тестовое приложение и подробное описание проблемы со скриншотами. Надеюсь, оно годится для отправки в ADN DevHelp.

Во вложении находится zip-архив с двумя файлами проекта - один исходный, созданный в 32-битной версии AutoCAD (TestVBA), второй - сохранен в 64-битной версии AutoCAD 2012 (TestVBA(sav2012_64)).

Описание тестового приложения:
Тестовое приложение состоит из кнопки Draw Polyline и текстового поля Polyline Area. При нажатии на кнопку Draw Polyline в командной строке появляется последовательность запросов точек - вершин полилинии. Построенная по указанным точкам полилиния автоматически замыкается и в поле Polyline Area отображается площадь полилинии.

Описание проблемы:
Проект, созданный в 32 битной версии AutoCAD без проблем загружается и работает в любой версии AutoCAD, любой разрядности. При этом в 64-разрядных версиях AutoCAD (кроме 2014) при выгрузке проекта (либо закрытии AutoCAD) возникает запрос о сохранении изменений.



Если выбрать вариант ответа "Да", то проект "привязывается" к конкретной библиотеке типов.
Так, файл сохраненный в версии AutoCAD 2012 корректно работает на той же машине и с версиями AutoCAD 2010-2011.
При переходе на версию 2013 тестовое приложение начинает работать некорректно: Полилиния строится только по двум первым точкам, остальные указанные пользователем точки игнорируются. В реальных проектах могут наблюдаться и другие ошибки (например сообщение о несовпадении типов при обращении к объектам чертежа).

В случае, если конкретная библиотека типов (в данном случае AutoCAD 2012 Type Library) отсутствует, то при попытке обращения к объектной модели AutoCAD выдается сообщение о невозможности найти библиотеку.



В случае перехода на 32-битную версию данное сообщение возникает даже в "правильном" AutoCAD (в случае тестового приложения - AutoCAD 2012).
Если открыть пункт меню VBA IDE Tools ->References, то можно увидеть потерянную библиотеку типов.



Замечание: Tools -> References мне удавалось открыть только в 32-битных версиях AutoCAD. В 64-битных версиях при попытке открыть данный пункт меню, AutoCAD закрывался с ошибкой.

Вопрос:
Существуют ли иные способы обойти данную проблему, кроме создания отдельного проекта для каждой из 64-битных версий AutoCAD?

Алексей Кулик:
Описание ошибки отправлено в ADN DevHelp.

Алексей Кулик:
Получен ответ (привожу перевод; оригинал могу отправить Вам в ЛС, если это необходимо):

--- Цитировать ---VBA - старая технология, которая фактически зависит от версии AutoCAD и (начиная с версии 2014) - еще и от разрядности. Причина подобного поведения кроется в том, что VBA модуль, реализованный Autodesk, помещается в отдельный процесс.
К сожалению, невозможно предложить другой путь, кроме как создавать отдельные модули для 32- и 64-разрядных версий AutoCAD. Можно создать .NET-модуль, который определяет разрядность AutoCAD и загружает соответствующий VBA-модуль.
--- Конец цитаты ---
Мое личное мнение: попытки использования VBA-модулей на данный момент, скорее всего - временное решение. Я бы попробовал постепенно переводить все на .NET-технологии, благо на официальном сайте Autodesk были уроки, показывающие, как переводить VBA-проекты в VB.NET. Аналогичная информация есть и на AutoCAD .NET Developer's Guide
---
P.S. Пожалуйста, сообщите - удовлетворителен ли ответ или надо будет что-то дополнять. Если все хорошо, то тогда я закрою case. Если нет - то будем дальше "терроризировать" ADN.

Gektor:

--- Цитата: Алексей Кулик от 09-07-2013, 09:12:12 ---Мое личное мнение: попытки использования VBA-модулей на данный момент, скорее всего - временное решение. Я бы попробовал постепенно переводить все на .NET-технологии, благо на официальном сайте Autodesk были уроки, показывающие, как переводить VBA-проекты в VB.NET. Аналогичная информация есть и на AutoCAD .NET Developer's Guide
---
P.S. Пожалуйста, сообщите - удовлетворителен ли ответ или надо будет что-то дополнять. Если все хорошо, то тогда я закрою case. Если нет - то будем дальше "терроризировать" ADN.

--- Конец цитаты ---

VBA - это наработанное за многие годы. :)
Мы сейчас постепенно уходим от VBA, но переработать все в короткие сроки не можем. Нам просто нужно было уточнить, есть ли обходные пути.
Ответ полностью устраивает, закрывайте case.
Большое спасибо за помощь!

Алексей Кулик:
Case закрыт, тему предлагаю оставить в живом варианте - мало ли...

Навигация

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

[*] Предыдущая страница

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